2014-01-15 73 views
4

我正在使用基于视图的表格,并且我想为单元格视图中的元素创建出口。我无法获得连接,但它始终是nil如何在表格单元视图中连接插座?

具体来说,我在表格单元中有一个NSProgressIndicator,并且想要在代码中操作它。

这是我到目前为止有:

我创建的NSTableView一个子类,与相应的出口属性:

@interface MyTableCellView : NSTableCellView 
@property IBOutlet NSProgressIndicator *myProgressIndicator; 
@end 

@implementation MyTableCellView 
-(void)awakeFromNib 
{ 
    // _myProgressIndicator is nil! 
} 
@end 

而且我已经在笔尖设置的自定义类。现有的NSTableCellView通过下拉菜单替换为MyTableCellView

在这一点上,一些意见:

  • 如果我按Ctrl +单击并拖动进度指示器连接到此插座,它没有显示。 enter image description hereenter image description here

  • 同样,如果我尝试按Ctrl +单击并拖动使用助理编辑的进度指标,我只能通过绑定连接属性。它不承认这是一个有效的出路。 enter image description here

  • 但是该出口显示在侧边栏,一个警告,它不存在:enter image description here

  • 我知道正在使用MyTableCellViewawakeFromNib断点证实了这一点,并确认_myProgressIndicatornil

这是一个沙箱项目,只比我所描述的要多。

那么,我该如何从代码访问这个进度指示器?

回答

0

我不相信你应该那样做;相反:

  1. 修改表视图的数据源使用的模型对象以填充表视图。
  2. 调用表格视图reloadData(或更好的reloadDataForRowIndexes:columnIndexes:)。

因此,您应该只需要一个表视图的出口来执行此操作,并且应该在表视图委托和/或数据源方法内完成对表视图的单元对象的任何修改。

+0

您正在描述绑定,但有些事情不可能通过绑定。例如发送'startAnimation'到进度指示器。 – tenfour

+0

@tenfour不,这没有约束力。它是修改模型的MVC,控制器修改视图(通过委托/数据源方法)。这是使用表格视图的直接程序化方法,而绑定是另一回事。 – trojanfoe

+0

@tenfour要添加到我的评论中,您可以轻松地将委托/数据源方法的'startAnimation'消息发送到进度指示器。 – trojanfoe

0

正如问题中所述,在Interface Builder中连接插座的常用方法不起作用(也许它已在最新版本的Xcode中修复,我仍在使用早于6的版本)。无论如何,它通过Connections Inspector工作。

  1. 在NSTableCellView的子类中创建一个IBOutlet。
  2. 在您的XIB中,从Identity Inspector将NSTableCellView更改为您的子类。
  3. 从Connections Inspector中,从您的插座拖动到View对象。