如何简单地设置具有多个列的NSTableView,以仅在一列中显示特定数据。我已经设置了IBOutlets,但不知道该从哪里开始。
如何简单地设置具有多个列的NSTableView,以仅在一列中显示特定数据。我已经设置了IBOutlets,但不知道该从哪里开始。
@implementation
中:- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
return 25; // fill this out
}
– (id) tableView:(NSTableView*)tableView
objectValueForTableColumn:(NSTableColumn*)column
row:(int)row {
return row % 3 ? @"Tick..." : @"BOOM!"; // fill this out
}
dataSource
属性设置为控制器。在Interface Builder中,从表格视图向控制器进行控制拖动并设置dataSource
。现在构建和运行,您应该在表格中看到您的数据。explosiveColumn
。在Interface Builder中,从控制器向要填充的列进行控制拖动并设置explosiveColumn
。然后,在tableView:objectValueForTableColumn:row:中,您可以测试column
参数是否与outlet设置的对象相同:– (id) tableView:(NSTableView*)tableView
objectValueForTableColumn:(NSTableColumn*)column
row:(int)row {
if (column == explosiveColumn) {
return row % 3 ? @"Tick..." : @"BOOM!";
} else {
// other columns blank for now
return nil;
}
}
这个教程可能会有用:http://www.cocoadev.com/index.pl?NSTableViewTutorial
以下是一个使用多个表视图和数据源方法的文档型应用程序示例:
#pragma mark - Data Source Methods
- (NSInteger) numberOfRowsInTableView:(NSTableView *)tv
{
if (tv == racerTableView)
return [racerList count];
else if (tv == vehicleTableView)
return [vehicleList count];
else
return 0; // something wrong here...
}
- (id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)col
row:(NSInteger)rowi
{
NSString *colid = [col identifier];
if (tv == racerTableView){
NHRacers *racer = [racerList objectAtIndex:rowi];
return [racer valueForKey:colid];
}
else if (tv == vehicleTableView){
NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
return [vehicle valueForKey:colid];
}
else
return 0; // something wrong here...
}
- (void)tableView:(NSTableView *)tv setObjectValue:(id)obj forTableColumn:(NSTableColumn *)col row:(NSInteger)rowi
{
NSString *colid = [col identifier];
if (tv == racerTableView) {
NHRacers *racer = [racerList objectAtIndex:rowi];
[racer setValue:obj forKey:colid];
}
else if (tv == vehicleTableView){
NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
[vehicle setValue:obj forKey:colid];
}
else
nil; // something wrong here...
[self updateChangeCount:NSChangeDone];
}
@interface NHVehicles : NSObject
{
NSUInteger entry;
NSString *name;
NSString *vehicleClass;
}
@property NSUInteger entry;
@property NSString *name, *vehicleClass;
@end
(在NHVehicles.m文件中)
@implementation NHVehicles
@synthesize entry, name, vehicleClass;
@end
对于这个tableView,“entry”,“name”和“vehicleClass”将被输入(不带引号)到它们各自列的标识符字段中。
如果您不想在类中显示某些数据,只需不输入列标识符的键即可。请注意:我正在使用Xcode 4.5.1,我注意到一旦我为特定列标识符输入了几个键,然后改变主意并尝试清除文本时,当我从标识符字段中删除文本时,它会发出警告(我不能再留空我编辑过的列)。这不难解决,但确实让人感到意外。
nil
。 - Dominic Cooney