Куда Ctrl-перетащить IBOutlets, просмотреть класс или ViewController? - PullRequest
0 голосов
/ 14 мая 2019

Я довольно новичок в кодировании.Я не уверен, должен ли IBOutlet (кнопка, текстовое поле и т. Д.), Перетаскиваемый ctrl из xib, идти в класс NSView xib или в контроллер представления, в который NSView добавлен как подпредставление.

какое-то время играл с этим, учась на ходу.Я застрял в удивлении, правильно ли я структурировал код.Это для MacOS, поэтому ресурсы ограничены и часто устарели.Я предположил бы, что розетка, добавленная для кнопки, например, войдет в контроллер, поскольку представления должны быть "немыми".Если я пытаюсь, чтобы действия всегда имели «действие», установленное автоматически, и набираю «Любой» по умолчанию - не то, что я привык видеть.Я подозреваю, что это может быть связано с набором классов для владельца файла и набором классов для представления в 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 голосов
/ 14 мая 2019

Идея выхода - создать ссылку на объект, который находится за пределами вашего кода. Эта концепция отлично подходит для создания прототипов, но по мере развития проекта ей становится трудно управлять.

Если ваш класс является классом, то он может ссылаться на себя. («Self» в swift или «this» в c ++) В этом случае вам не нужен выход.

Розетка обычно используется контроллером, который должен поддерживать вид. Эта концепция является альтернативой созданию и настройке представления вручную.

...