如何将子类添加到 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;
}
我在 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;
}