2016-02-19 42 views
1

我的应用程序将文本文件读入[Card]。每张卡在前面都有一个双字母代码,根据代码,我将卡分成不同的NSTableView。这让我可以在IB中设置布局,这样每组卡都有相应的显示。将NSTableView的委托和数据源连接到自定义子类?

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

class CardView: NSTableView, NSTableViewDataSource, NSTableViewDelegate { ... 

,并且对于一个例子...

class GeometryView: CardView { ... 

然后我去了IB,选择的tableview中,并改变了它的类GeometryView。现在我必须设置委托和数据源,这是我遇到问题的地方:IB不允许将任何设置拖到GeometryView或CardView。

那么......这些IB设置的目标必须是特定的子类,比如NSViewController?或者我有什么东西可以让IB将这些视为目标?我没有在原创VC中做任何事情,它只是工作。或者我只是在IB中做错了什么?

在这张图片中,您可以看到最左边的tableview,助手中的自定义视图子类以及右边tableview的连接。任何试图从连接拖到助手中的任何地方都会失败。请注意,两个现有的连接是前代表VC,这是我想要取代。

enter image description here

+0

添加的你正在尝试做的截图,应该有连接使用IB委托或数据源没有问题就像你描述的那样。 –

+0

根据要求... –

+0

我不从截图中看到的问题,这里是它应该如何看起来像https://drive.google.com/file/d/0BxUbHGaoHgxtcUwxTE44Z2FrdlE/view?usp=sharing –

回答

1

我不知道为什么界面生成器不会让你的委托或数据源连接到它,但你可以做到这一点编程。该awakeFromNib方法可能是这样做的最好的地方,因为它是既initWithFrameinitWithCoder后叫:

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

    super.awakeFromNib() 
} 
+0

非常有用!你知道默认是什么吗?是默认的代表,例如,“自我”或“无”? –

+0

好吧,我C&等静压的代码到我的基类中,'类CardView:NSTableView的,NSTableViewDataSource,NSTableViewDelegate',但它响应“不能分配给属性:‘自我’是不可改变我假设'self'不是一个上。正确的,但在左边,'self.dataSource'。 –

+0

唉唉,这是self.setDelegate(个体经营)等 –

相关问题