2

我正在以NSTableView编程方式创建一个。是我分配andnumberOfRowsInTableView时唯一调用的方法。仍然是空白和空的。我究竟做错了什么?delegatedataSourceNSTableView

在 myDocument.m 中:

- (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是唯一被调用的东西。为什么?我怎样才能解决这个问题?

4

1 回答 1

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。

于 2013-09-03T06:53:37.513 回答