如何将子类添加到 NSTableCellView?

How can I add subclass to NSTableCellView?

我在 IB 中向 NSTable 添加图像和文本 Table 单元格视图。 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有默认的outlet,所以我可以使用cell.textFiled来访问这个textField对象并改变它的值。这是我的问题,如果我在这个 Image & Text Table Cell View 中添加一个额外的 TextField,一列中有两个 TextField,那么如何获取我添加的第二个 TextFiled,更改 TextFiled 的值?

NSTableCellView Class Reference 页面所述

Additional properties can be added by subclassing NSTableCellView and adding the required properties and connecting them programmatically or in Interface Builder.

创建你的 NSTableCellView-subclass(比如 'CustomTableCellView'),定义一个额外的文本字段出口 属性(图像视图和第一个文本字段在超级 class).在 Interface Builder 中设置单元格原型的 class 并将附加文本字段控件连接到您的 属性.

在你的 NSTableViewDelegate class:

- (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; 
}