我的应用将文本文件读入[Card]
。每张卡的前面都有一个双字母代码,我根据该代码将卡分成不同的NSTableViews。这让我可以在IB中设置布局,这样每组卡都有适当的显示。
我曾经在一个VC中拥有所有控制器代码,但随着表数量的增加,此代码的复杂性也随之增加。由于视图主要在布局和一些默认设置方面不同,因此它们都可以从单个类中下降。所以我做了:
class CardView: NSTableView, NSTableViewDataSource, NSTableViewDelegate { ...
,举个例子......
class GeometryView: CardView { ...
然后我去了IB,选择了tableview,并将它的类更改为GeometryView。现在我必须设置委托和dataSource,这就是我遇到问题的地方:IB不允许我将设置拖动到GeometryView或CardView。
那么......这些IB设置的目标必须是一个特定的子类,比如NSViewController吗?或者是否有一些我错过的东西让IB看到这些作为目标?我没有在原VC中做任何事情,它只是起作用。或者我只是在IB做错了什么?
在此图像中,您可以看到最左侧的tableview,帮助程序中的自定义视图子类以及右侧的tableview连接。任何从连接拖动到帮助器中任何位置的尝试都会失败。请注意,两个现有连接是前代理VC,这是我想要替换的。
答案 0 :(得分:1)
我不确定为什么Interface Builder不允许您将委托或数据源连接到自身,但您可以以编程方式执行此操作。 awakeFromNib
方法可能是最好的方法,因为它在initWithFrame
和initWithCoder
之后调用:
override func awakeFromNib() {
delegate = self
dataSource = self
super.awakeFromNib()
}