【发布时间】:2017-12-26 18:12:01
【问题描述】:
这是我的自定义视图的代码。我还有一个自定义 XIB 文件,其中包含 mainView 视图。我需要在视图控制器的 stackView 中使用 3 次。我该怎么做?
class PlatformView: NSView {
@IBOutlet weak var mainView: NSView!
@IBOutlet weak var currentPriceLabel: NSTextField!
//Here is the button
@IBAction func testButtonPressed(_ sender: Any) {
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
NSNib(nibNamed: NSNib.Name(rawValue: "PlatformView"), bundle: nil)?.instantiate(withOwner: self, topLevelObjects: nil)
addSubview(mainView)
self.mainView.frame = self.bounds
}
}
这是我的 mainViewController 的代码
class ViewController: NSViewController {
@IBOutlet weak var platformStackView: NSStackView!
var platformView1:PlatformView!
var platformView2:PlatformView!
var platformView3:PlatformView!
override func viewDidLoad() {
super.viewDidLoad()
//This part is not working in a macOS app
if let tempView = Bundle.main.loadNibNamed(NSNib.Name(rawValue: "PlatformView"), owner: self, topLevelObjects: nil)?.first as? PlatformView {
self.platformView1 = tempView
self.platformView1.currentPriceLabel = "$1.35"
self.platformStackView.addArrangedSubview(self.platformView1)
self.platformStackView.addSubview()
self.platformStackView.addView(tempView, in: self)
//Which one of these three methods should I use?
}
}
}
我想通过 IBAction 插座连接平台视图中的按钮。我将如何处理这些?
我还添加了三种将视图添加到堆栈视图的方法。哪个最好用?
它还说.loadNibNamed 将返回一个 Bool 而不是视图的实例。如何在此视图控制器中多次加载视图?我显然还需要在 VC 的整个生命周期中进行更改,因此我需要保留该视图的实例。
【问题讨论】: