0

我正在尝试NSStackView使用始终相同的自定义视图来实现。所以我已经定义了我的 xib 文件,链接了我的类中的所有内容,关联了类,......但我确信我错过了一些东西,因为视图中的内容没有出现。非常感谢您的帮助。

我的故事板:在此处输入图像描述

我的xib文件:在此处输入图像描述

我运行以下代码时的结果:在此处输入图像描述

我的文件是这样的:

class CustomView: NSView, NSTableViewDelegate, NSTableViewDataSource {
    @IBOutlet weak var segmentControlOutlet: NSSegmentedControl!
    @IBOutlet weak var tableViewOutlet: NSTableView!
}

class ViewController: NSViewController, NSStackViewDelegate {
    
    @IBOutlet weak var stackViewOutlet: NSStackView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        stackViewOutlet.delegate = self
        
        let newView = CustomView()
        stackViewOutlet.addArrangedSubview(newView)
        
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}
4

1 回答 1

1

我找到了答案,您需要正确启动视图。这样做:

class CustomView: NSView, NSTableViewDelegate, NSTableViewDataSource {

    @IBOutlet var viewOutlet: NSView!
    @IBOutlet weak var segmentControlOutlet: NSSegmentedControl!
    @IBOutlet weak var tableViewOutlet: NSTableView!

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        Bundle.main.loadNibNamed("CustomView", owner: self, topLevelObjects: nil)
        addSubview(viewOutlet)
        viewOutlet.frame = self.bounds
        viewOutlet.autoresizingMask = [.height, .width]
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        Bundle.main.loadNibNamed("CustomView", owner: self, topLevelObjects: nil)
        addSubview(viewOutlet)
        viewOutlet.frame = self.bounds
        viewOutlet.autoresizingMask = [.height, .width]
    }

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

        // Drawing code here.
    }
}

请注意,当您加载 nib 名称时,“CustomView”是您的 xib 文件的名称;)

于 2020-03-28T21:31:26.623 回答