我需要从 NSTableView 和 NSOutlineView 中删除未使用的单元格行。在 UITableView 我们有 tablefooter 的属性。NSTableView 有什么吗?
请检查代码和对此的一些描述。
dataArr 是一个包含 SearchItem 类型对象的数组,它们只是数据的模态而已。dataArr 有 4 个对象意味着总共 4 行将出现在 NSOutline 视图中。
((SearchItems *)item).children 是 OutlineView 子项对应单个 SearchItems 的数据数组。每行有 2 个孩子,因此当您展开行时,将显示 2 个孩子。
//MARK: NSOutlineViewDataSource
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(nullable id)item
{
if (item != nil && [item isKindOfClass:[SearchItems class]])
{
return ((SearchItems *)item).children.count;
}
return dataArr.count;
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(nullable id)item
{
if(item != nil && [item isKindOfClass:[SearchItems class]])
{
return ((SearchItems *)item).children[index];
}
return dataArr[index];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
if(item != nil && [item isKindOfClass:[SearchItems class]])
{
return ((SearchItems *)item).children.count > 0;
}
return false;
}
//MARK: NSOutlineViewDelegate
- (nullable NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(nullable NSTableColumn *)tableColumn item:(id)item
{
NSTableCellView *view;
if([item isKindOfClass:[SearchSubItems class]])
{
view = (NSTableCellView *)[outlineView makeViewWithIdentifier:@"SearchSubItem" owner:self];
view.textField.stringValue = ((SearchSubItems *)item).nameOfSubItem;
[view.textField sizeToFit];
}
else
{
view = (NSTableCellView *)[outlineView makeViewWithIdentifier:@"SearchItem" owner:self];
view.textField.stringValue = ((SearchItems *)item).nameStr;
[view.textField sizeToFit];
}
return view;
}