Пользовательский NSView с NSStackView - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь реализовать NSStackView всегда с одним и тем же настраиваемым представлением. Итак, я определил свой xib-файл, связал все внутри моего класса, связал класс, ... но я уверен, что что-то упустил, потому что содержимое внутри представления не появляется. Большое спасибо за вашу помощь.

Моя раскадровка: Раскадровка

Мой файл 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.
        }
    }


}

1 Ответ

1 голос
/ 29 марта 2020

Я нашел ответ, вам нужно правильно начать просмотр. Для этого:

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.
    }
}

Пожалуйста, примите автомобиль, чтобы при загрузке имени пера «CustomView» было именем вашего файла xib;)

...