将NSTableView的委托和dataSource连接到自定义子类?

时间:2016-02-19 15:51:29

标签: swift nstableview

我的应用将文本文件读入[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,这是我想要替换的。

enter image description here

1 个答案:

答案 0 :(得分:1)

我不确定为什么Interface Builder不允许您将委托或数据源连接到自身,但您可以以编程方式执行此操作。 awakeFromNib方法可能是最好的方法,因为它在initWithFrameinitWithCoder之后调用:

override func awakeFromNib() {
    delegate = self
    dataSource = self

    super.awakeFromNib()
}