gpt4 book ai didi

swift - 在哪里按住 Ctrl 键拖动 IBOutlets、 View 类或 ViewController?

转载 作者:行者123 更新时间:2023-11-30 10:44:13 26 4
gpt4 key购买 nike

我对编码还很陌生。我不确定从 xib 按住 ctrl 键拖动的 IBOutlet(按钮、文本字段等)是否应该进入 xib 的 NSView 类或将 NSView 添加为 subview 的 View Controller 。

我已经研究这个有一段时间了,边学边做。我一直想知道我的代码结构是否正确。这是针对 MacOS 的,因此资源有限且经常过时。例如,我假设为按钮添加的 socket 将进入 Controller ,因为 View 应该是“哑的”。如果我尝试让操作始终自动设置“操作”并默认键入“任何” - 这不是我习惯看到的。我怀疑这可能与文件所有者的类集和IB中 View 的类集有关。如果有人能概述处理此问题的最佳方法,那就太好了,谢谢!

加载xib的 View :

class View4: NSView {

@IBOutlet weak var view: View4!

override init(frame frameRect: NSRect) {

super.init(frame: frameRect)

Bundle.main.loadNibNamed("View4", owner: self, topLevelObjects: nil)

self.frame = self.bounds

self.wantsLayer = true
self.translatesAutoresizingMaskIntoConstraints = false
self.layer?.backgroundColor = NSColor.purple.cgColor
self.roundedCorners(on: self)
// add xib to custom NSView subclass
self.addSubview(self.view)

}

required init?(coder: NSCoder) {
super.init(coder: coder)
}

override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)

// Drawing code here.
}
}

对应的ViewController:

class View4Controller: NSViewController {

override func loadView() {

print("View4Controller.loadView")
self.view = NSView()
}

override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.

print("View4Controller.viewDidLoad")
self.view = View4()
}
}

最佳答案

socket 的想法是引用您创建的代码之外的对象。这个概念非常适合原型(prototype)设计,但随着项目的发展往往会变得难以管理。

如果你的类是类,那么它可以引用自身。 (swift中的“self”或c++中的“this”)在这种情况下你不需要 socket 。

socket 通常由需要维护 View 的 Controller 使用。这个概念是手动创建和配置 View 的替代方案。

关于swift - 在哪里按住 Ctrl 键拖动 IBOutlets、 View 类或 ViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com