两个不同大小的NSTableCellView以相同的大小显示

时间:2012-10-18 22:44:37

标签: objective-c xcode macos nstableview nstablecellview

以下是我的2个NSTableCellViews:
enter image description here

第一个比第二个大(当用户搜索tableview并且没有结果时使用这个)但是当我运行我的应用时,第二个获得第一个的大小:
enter image description here

为什么会这样?这是我的代码部分

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    if (noResults){
        return 1; 
    }else{
        return [array count];
    }
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    if (noResults){
        NSTableCellView *result = [tableView makeViewWithIdentifier:@"NoResults" owner:self];
        result.textField.stringValue = [NSString stringWithFormat:@"No results for \"%@\"", _searchTXT.stringValue];
        return result;
    }else{ 
        SearchTableCell *result = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
        result.textField.stringValue = @"Name";
        result.textField2.stringValue = @"Last Name";
        return result;
    }
}

3 个答案:

答案 0 :(得分:2)

您需要实现tableView:heightForRowAtIndexPath:方法。否则,单元格将全部为表视图rowHeight属性的高度。

答案 1 :(得分:1)

  • - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if(noResults){

    //在此处返回NSTableCellView高度;

    }其他{

    //返回SearchTableCell高度;

    }

}

希望这会对你有所帮助。

答案 2 :(得分:1)

对于基于视图的NSOutlineView,请实现委托方法outlineView:heightOfRowByItem:以返回所需的行高。

要避免代码中的常量,请考虑从关联视图中确定高度:

- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item
{
    NSView* view = [self outlineView:outlineView viewForTableColumn:nil item:item];
    return (view ? NSHeight(view.frame) : outlineView.rowHeight);
}