如何在表格单元视图中连接插座?

时间:2014-01-15 11:33:25

标签: macos cocoa interface-builder nstablecellview

我正在使用基于视图的表,我想在单元格视图中为元素创建一个插座。我无法通过连接来获得连接...它总是nil

具体来说,我在表格单元格中有一个NSProgressIndicator,并希望在代码中对其进行操作。

这是我到目前为止所拥有的:

我创建了一个NSTableView的子类,其中包含相应的outlet属性:

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

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

我已经在笔尖中设置了自定义类。现有的NSTableCellView已通过下拉列表替换为MyTableCellView

此时,有些观察:

  • 如果我 Ctrl +单击并拖动进度指示器以连接此插座,则不显示。 enter image description here enter image description here

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

  • 然而,此插座显示在侧栏上,并显示不存在的警告:enter image description here

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

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

那么,如何从代码中访问此进度指示器?

2 个答案:

答案 0 :(得分:0)

我不相信你应该这样做;代替:

  1. 修改表视图数据源使用的模型对象以填充表视图。
  2. 调用表格视图reloadData(或更好reloadDataForRowIndexes:columnIndexes:)。
  3. 因此,您只需要一个表视图的插座来执行此操作,并且应该在表视图委托和/或数据源方法中对表视图的单元对象进行任何修改。

答案 1 :(得分:0)

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

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