如何将子类添加到NSTableCellView?

时间:2015-02-25 15:29:41

标签: macos cocoa nstableview nstablecolumn nstablecellview

我添加了一个Image& IB中的NSTable文本表单元格视图。 Text Table Cell View中有TextFiled和ImageView,因此我的代码如下所示:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    NSString *iden = [ tableColumn identifier ];
    if ([iden isEqualToString:@"MainCell"]) {
        NSTableCellView *cell = [ tableView makeViewWithIdentifier:@"MainCell11" owner:self ];
        [cell.textField setStringValue:@"123"];
        [cell.imageView setImage:[[NSImage alloc] initByReferencingFile:@"/Users/Pon/Pictures/17880.jpg"]];
        return cell;
    }
    return nil; 
}

我发现textfield和imageView有默认插座,所以我可以使用cell.textFiled来访问这个textField对象并更改它的值。这是我的问题,如果我为此Image&添加额外的TextField文本表单元格视图,一列中有两个TextField,那么如何获取我添加的第二个TextFiled,更改TextFiled的值?

1 个答案:

答案 0 :(得分:3)

正如它在NSTableCellView Class Reference页面上所说的

  

可以通过继承NSTableCellView并添加所需的属性并以编程方式或在Interface Builder中连接它们来添加其他属性。

创建NSTableCellView子类(比如'CustomTableCellView'),定义一个额外的文本字段出口属性(图像视图和第一个文本字段在超类中定义)。在Interface Builder中设置单元格原型的类,并将其他文本字段控件连接到您的属性。

在您的NSTableViewDelegate类中:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    NSString *iden = [ tableColumn identifier ];
    if ([iden isEqualToString:@"MainCell"]) {
        CustomTableCellView *cell = [ tableView makeViewWithIdentifier:@"MainCell11" owner:nil ]; // use custom cell view class
        [cell.textField setStringValue:@"123"];
        [cell.imageView setImage:[[NSImage alloc] initByReferencingFile:@"/Users/Pon/Pictures/17880.jpg"]];
        [cell.addinitionalField setStringValue:@"321"]; // that is all
        return cell;
    }
    return nil; 
}