我想用自定义NSTableCellViews创建一个NSTableview。
这就是我现在所拥有的:
这里我以编程方式创建表视图:
NSScrollView *tableContainer = [[NSScrollView alloc]initWithFrame:NSMakeRect(self.window.frame.size.width-TABLEWIDTH, 0, TABLEWIDTH, self.window.frame.size.height)];
NSTableView *tableView = [[NSTableView alloc] initWithFrame:NSMakeRect(self.window.frame.size.width-TABLEWIDTH, 0, TABLEWIDTH, self.window.frame.size.height)];
NSTableColumn *firstColumn = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease];
[[firstColumn headerCell] setStringValue:@"First Column"];
[tableView addTableColumn:firstColumn];
tableView.dataSource = self;
tableView.delegate = self;
[tableContainer setDocumentView:tableView];
tableContainer.autoresizingMask = NSViewHeightSizable | NSViewMinXMargin;
[self.window.contentView addSubview: tableContainer];
这是委托方法,我想放置自定义单元格代码:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
// In IB the tableColumn has the identifier set to the same string as the keys in our dictionary
NSString *identifier = [tableColumn identifier];
if ([identifier isEqualToString:@"myCell"]) {
// We pass us as the owner so we can setup target/actions into this main controller object
CustomCell *cellView = [tableView makeViewWithIdentifier:identifier owner:self];
// Then setup properties on the cellView based on the column
cellView.textField.stringValue = @"Name";
return cellView;
}
return nil;
}
在我的自定义单元格的nib文件中,我使用名为 CustomCell 的自定义类连接了单元格视图,其中包含 NSTableCellView 。我现在还没有做任何其他步骤。所以我的 CustomCell.m 只是默认的初始化代码。我没碰过它。我在我的nib文件中没有做任何其他事情,所以我没有更改文件的所有者或类似的东西,因为我真的不知道该怎么做。 任何人都可以帮忙吗?我查看了Apple文档中的示例文件,但经过几天的研究后,我还没有找到任何解决方案。如果你能帮助我,我真的很感激。
答案 0 :(得分:3)
这就是我最终做的事情:
当然,您必须继承NSTableCellView并将其返回,如下所示。如果您熟悉iOS中的表视图,则应熟悉以下方法:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{
//this will be called first. It will tell the table how many cells your table view will have to display
return [arrayToDisplay count];
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
//this is called after the count of rows is set. It will populate your table according to the data your array to display contains
[tableView setTarget:self];
[tableView setAction:@selector(click)];
NSString *identifier = [tableColumn identifier];
if ([identifier isEqualToString:@"TheCell"]) {
CustomCell *cellView = [tableView makeViewWithIdentifier:identifier owner:self];
cellView.cellText.stringValue = [arrayToDisplay objectAtIndex:row];
return cellView;
}
return nil;
}
选择行时触发的click
方法如下所示:
-(void)click{
int index = [table selectedRow];
// Do something with your data
//e.g
[[arrayToDisplay objectAtIndex:index] findHiggsBoson];
}
还有一些必须添加到NSTableView中的内容:
NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:@"column"];
column.width = self.frame.size.width;
[tableView addTableColumn:column];
答案 1 :(得分:1)
您不需要将NSTableView子类化为具有自定义NSTableViewCell子类。 您可以考虑使用基于视图的表视图...