将 IBOutlets 按住哪里,查看 class 或 ViewController?
Where to ctrl-drag IBOutlets, view class or ViewController?
我对编码还很陌生。我不确定从 xib 中按 ctrl 拖动的 IBOutlet(按钮、文本字段等)是否应该进入 xib 的 NSView class 或将 NSView 添加为子视图的视图控制器中。
我已经研究了一段时间,边学边学。我一直想知道我的代码结构是否正确。这是针对 MacOS 的,因此资源有限且经常过时。例如,我假设为按钮添加的出口会进入控制器,因为视图应该是 "dumb"。如果我尝试让这些操作始终自动设置 "action" 并默认键入 Any - 这不是我以前看到的。我怀疑这可能与文件所有者的 class 集和 IB 中视图的 class 集有关。如果有人能概述处理此问题的最佳方法,那就太好了,谢谢!
加载xib的视图:
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()
}
}
outlet 的想法是引用一个在您创建的代码之外的对象。这个概念非常适合原型制作,但随着项目的发展往往会变得难以管理。
如果你class就是class,那么它可以引用自己。 (swift 中的“self”或 c++ 中的“this”)在这种情况下你不需要插座。
插座通常由需要维护视图的控制器使用。该概念是手动创建和配置视图的替代方法。
我对编码还很陌生。我不确定从 xib 中按 ctrl 拖动的 IBOutlet(按钮、文本字段等)是否应该进入 xib 的 NSView class 或将 NSView 添加为子视图的视图控制器中。
我已经研究了一段时间,边学边学。我一直想知道我的代码结构是否正确。这是针对 MacOS 的,因此资源有限且经常过时。例如,我假设为按钮添加的出口会进入控制器,因为视图应该是 "dumb"。如果我尝试让这些操作始终自动设置 "action" 并默认键入 Any - 这不是我以前看到的。我怀疑这可能与文件所有者的 class 集和 IB 中视图的 class 集有关。如果有人能概述处理此问题的最佳方法,那就太好了,谢谢!
加载xib的视图:
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()
}
}
outlet 的想法是引用一个在您创建的代码之外的对象。这个概念非常适合原型制作,但随着项目的发展往往会变得难以管理。
如果你class就是class,那么它可以引用自己。 (swift 中的“self”或 c++ 中的“this”)在这种情况下你不需要插座。
插座通常由需要维护视图的控制器使用。该概念是手动创建和配置视图的替代方法。