在 NSTableCellView 上设置文本和图像

Setting text and image on NSTableCellView

您好,我想在我的程序中使用 NSTableView,但在设置 NSTableCellView 的值并让它们显示在 NSTableView 中时遇到问题。当我 运行 我的程序时,只显示空白单元格。使用 NSLog,我可以看到单元格 imageView 已设置,但不显示。然而,当我去为 NSTableCellViews 设置 stringValues 时,尽管字符串包含数据,但我只从我的 NSLog 中得到 null。这是我遇到问题的委托方法:

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {

    NSString *cellIdentifier;
    NSImageView *pageImageView;
    NSString *pageString;

    int pageVotes;

    if (_connectionArray.count == 0) {
        return nil;
    }

    NSTableCellView *cellView = [[NSTableCellView alloc] init];

    if (tableColumn == tableView.tableColumns[0]) {
        cellIdentifier = @"firstColumn";
        pageImageView = [[_connectionArray objectAtIndex:row] getImage]; //Gets imageView from Page Object
        cellView.imageView = pageImageView; //Set image view for cell
        NSLog(@"%@", cellView.imageView); //This works
    }
    if (tableColumn == tableView.tableColumns[1]) {
        cellIdentifier = @"secondColumn";
        pageString = [[_connectionArray objectAtIndex:row] getTitle];
        cellView.textField.stringValue = pageString; //Set text for cell
        NSLog(@"%@", cellView.textField.stringValue); //Does not work, returns null
    }
    if (tableColumn == tableView.tableColumns[2]) {
        cellIdentifier = @"thirdColumn";
        pageVotes = [[_connectionArray objectAtIndex:row] getVotes];
        pageString = [NSString stringWithFormat:@"%i", pageVotes]; //Convert int to string
        cellView.textField.stringValue = pageString; //Set text for cell. 
        NSLog(@"%@", cellView.textField.stringValue); //Does not work, returns null
    }

    [_tableView makeViewWithIdentifier:cellIdentifier owner:self];

    return cellView;

}

我认为 Storyboard 和 ViewController 之间的一切设置都正确,但我很可能是错的,因为这是我第一次使用 NSTableViews。我也试过使用:

[cellView setImage:pageImageView];
[cellView setTextField:[NSTextField textFieldWithString:pageString]];

但我 运行 遇到了同样的问题。如果有人可以提供帮助,我将不胜感激!我觉得我错过了一些简单的东西......

设置 NSTableCellViewtextFieldimageView 属性不会将文本字段或图像视图添加到单元格视图。这些出口只是为了 通知 单元格视图其子视图中的哪些是主要文本字段 and/or 主要图像视图。您仍然负责将这些视图作为子视图或更深的后代视图添加到单元格视图中。

此外,让您的模型发布视图不是一个好主意。这不是它应该如何工作的。除其他外,这将特别干扰将这些视图添加到单元视图的子视图层次结构中。

同样奇怪的是,您既创建了单元格视图又要求 table 视图创建它(通过调用 -makeViewWithIdentifier:owner:)。通常,您会做一个或另一个,或者先尝试 -makeViewWithIdentifier:owner: 并且仅在失败时才创建视图。而且,当然,您不会忽略 return 值。

坦率地说,最好的办法是在 Interface Builder 中设置这一切。如果你做对了,根本不需要实施 -tableView:viewForTableColumn:row: 。你有没有走那条路的原因?