我正以编程方式创建NSTableView
。我分配numberOfRowsInTableView
和delegate
时,dataSource
是唯一被调用的方法。 NSTableView
仍为空白。我做错了什么?
:
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
NSTableView *tableView = [NSTableView alloc] initWithFrame:CGRectMake(0,0,400,400)];
// I've tried putting the delegate before the datasource. No change.
tableView.dataSource = self;
tableView.delegate = self;
// I've tried adding the table before assigning the delegate/datasource. No change.
[aController.window.contentView addSubview:tableView];
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSLog(@"making view for table...");
NSBox *box = [[NSBox alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
box.borderColor = [NSColor blackColor];
box.borderWidth = 10;
return box;
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
NSLog(@"getting data...");
return @{ @"myKey": @"myValue" };
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
NSLog(@"getting count...");
return 2;
}
numberOfRowsInTableView
是唯一被召唤的东西。为什么?我该如何解决这个问题?
答案 0 :(得分:1)
您的表视图不包含任何列,因此不会调用viewForColumn:
委托方法。
使用以下内容替换windowControllerDidLoadNib
中的初始化代码,并调用您的委托方法:
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
NSTableView *tableView = [[NSTableView alloc] initWithFrame:CGRectMake(0,0,400,400)];
[tableView addTableColumn:[[NSTableColumn alloc] initWithIdentifier:@"MyColumn"]];
tableView.dataSource = self;
tableView.delegate = self;
[aController.window.contentView addSubview:tableView];
}
您可以使用Interface Builder配置&布置你的tableview。