基于视图的NSTableView与章节

use*_*905 15 macos cocoa objective-c interface-builder

我正在寻找一种在NSTableView中创建iOS部分的方法(如在iTunes 11中 - 附加).

正如您在屏幕截图中看到的,"专辑"是一个部分,"歌曲"是第二部分.任何帮助,将不胜感激.

谢谢!

在此输入图像描述

Tap*_*rms 21

我看到这是一个老问题,但答案是使用基于View的NSTableView然后实现tableView:viewForTableColumn:row:.

这是基于我如何做的代码.它尚未在Xcode中编译.

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSTableCellView *cell = nil;
        // get your row from your array of objects.
        // determine if it's a section heading or not.

    SomeClass *someObject = [self.myObjects objectAtIndex:row];

    if (someObject.isSectionHeading) {
        cell = [tableView makeViewWithIdentifier:@"HeaderCell" owner:self];
        cell.textField.objectValue = someObject.headingName;
    } else {
        cell = [tableView makeViewWithIdentifier:@"DataCell" owner:self];
        cell.textField.objectValue = someObject.rowValue;
    }

    return cell;

}
Run Code Online (Sandbox Code Playgroud)

而且tableView:isGroupRow会在你的章节标题上加上灰色背景

-(BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row {
    BOOL isGroup = NO;
    // Choose some way to set isGroup to YES or NO depending on your records.
    return isGroup;
}
Run Code Online (Sandbox Code Playgroud)

确保在Interface Builder中已将NSTableCellViews的标识符设置为"HeaderCell"和"DataCell".或者使用你想要的任何名字.只要它与您的代码匹配.您可以根据需要拥有尽可能多的这些单元格.

如果您创建NSTableCellView的子类,则可以轻松地将自己的文本字段,复选框,图像等添加到视图中并相应地设置它们的值.

  • 我可以补充说,你也可以通过实现`tableView:heightOfRow:`方法在内容单元格和节单元格之间提供不同的单元格高度.对于section单元格,您可以使用默认高度,如下所示:`[tableview rowHeight]`和内容单元格,您可以使用自己的内容单元格,如70.0. (2认同)

Max*_*Max 3

如果你想要部分,你基本上必须滚动你自己的(认识到行 x 应该是一个部分单元格并提供一个部分视图。TwUITUITableView 可以实现这一点(并且根据我的经验,大大提高了滚动性能)。