Swift 连接NSTableView';s委托和数据源到自定义子类?

Swift 连接NSTableView';s委托和数据源到自定义子类?,swift,nstableview,Swift,Nstableview,我的应用程序将文本文件读入[Card]。每张卡的正面都有一个两个字母的代码,我根据代码将这些卡分成不同的NSTableView。这使我可以在IB中设置布局,以便每组卡都有适当的显示 我曾经把所有的控制器代码都放在一个VC中,但是随着表数量的增加,代码的复杂性也随之增加。由于视图主要在布局和一些默认设置上有所不同,因此它们都可以从单个类中派生。所以我做了: class CardView: NSTableView, NSTableViewDataSource, NSTableViewDelegate

我的应用程序将文本文件读入
[Card]
。每张卡的正面都有一个两个字母的代码,我根据代码将这些卡分成不同的NSTableView。这使我可以在IB中设置布局,以便每组卡都有适当的显示

我曾经把所有的控制器代码都放在一个VC中,但是随着表数量的增加,代码的复杂性也随之增加。由于视图主要在布局和一些默认设置上有所不同,因此它们都可以从单个类中派生。所以我做了:

class CardView: NSTableView, NSTableViewDataSource, NSTableViewDelegate { ...
举个例子

class GeometryView: CardView { ...
然后我转到IB,选择tableview,并将其类更改为GeometryView。现在我必须设置委托和数据源,这就是我的问题所在:IB不允许我将任何设置拖到GeometryView或CardView

所以。。。这些IB设置的目标是否必须是特定的子类,例如NSViewController?或者是我遗漏了什么让IB将这些视为目标?我在最初的VC里什么都没做,只是起了作用。或者我只是在IB中做了错误的事情

在此图像中,您可以看到最左侧的tableview、辅助对象中的自定义视图子类以及右侧的tableview连接。任何从连接拖动到辅助对象中任何位置的尝试都将失败。请注意,现有的两个连接是到前一个委托VC的,我正试图替换它


我不确定为什么Interface Builder不允许您将委托或数据源连接到自身,但您可以通过编程实现。
awakeFromNib
方法可能是最好的方法,因为它是在
initWithFrame
initWithCoder
之后调用的:

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

    super.awakeFromNib()
}

添加您正在尝试执行的操作的屏幕截图,以您描述的方式使用IB链接代理或数据源应该没有问题。我从屏幕截图中看不到问题,这里有一个屏幕截图应该是@a-Live的样子:两者之间有区别-似乎您在tableview中有一个tableview?我在IB中创建的tableview位于ClipView中。在您的例子中,您将tableView的委托连接到其他对象,而在我的例子中,它是同一个对象。我认为这在你的示例中也不起作用-尝试拖动到“表视图”。这是在IB创建的标准表视图。非常有用!你知道默认值是多少吗?是否为默认委托,例如“self”或“nil”?好的,我将该代码保存到我的基类中,
类CardView:NSTableView,NSTableViewDataSource,NSTableViewDelegate
,但它会响应无法分配给属性:“self”是不可变的。我假设
self
不是右边的,而是左边不可见的,
self.dataSource
。啊,它是self.setDelegate(self),等等。
self
是不可变的吗?真奇怪。我是一名iOS程序员,在那里我的代码运行良好。据我所知,
self.setDelegate(self)
self.delegate=self
在Swift中是等价的……是的,这有点奇怪,不是吗。我正在雷达上记录。