在哪里ctrl拖动IBOutlets,视图类或ViewController?

时间:2019-05-14 02:02:41

标签: swift macos nsview nsviewcontroller

我对编码很陌生。我不确定是否应将xib中的IBOutlet(按钮,文本字段等)按ctrl拖入xib的NSView类或添加了NSView作为子视图的视图控制器中。

我已经玩了一段时间了,边走边学。我一直想知道我的代码结构是否正确。这是针对MacOS的,因此资源有限且经常过时。我假设例如为按钮添加的插座将进入控制器,因为视图应为“哑”。如果我尝试使操作始终自动设置为“操作”,并默认将其键入为“ Any”-而不是我经常看到的内容。我怀疑这可能与为文件所有者设置的类和为IB中的视图设置的类有关。如果有人能概述处理此问题的最佳方法,那就太好了!

加载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()
}
}

1 个答案:

答案 0 :(得分:0)

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

如果您的课程是课程,那么它可以引用自己。 (快速的“ self”或c ++的“ this”)在这种情况下不需要插座。

该插座通常由需要维护视图的控制器使用。该概念是手动创建和配置视图的替代方法。