如何在OS X中从NSTableView中删除多余的行?

问题描述 投票:0回答:1

我需要从NSTableView和NSOutlineView中删除未使用的单元格行。在UITableView中,我们具有tablefooter的属性。 NSTableView有什么用吗?

请检查代码和对此的一些描述。

dataArr是一个包含SearchItem类型对象的数组,它们只是数据的模式,仅此而已。 dataArr有4个对象,这意味着总共4行将出现在NSOutline视图中。

((SearchItems *)item).children是与单个SearchItems对应的OutlineView子级的数据数组。每行有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;
}
objective-c macos nstableview nstablecellview
1个回答
0
投票

使用此委托方法返回自定义行。这样,您可以按照示例进行精美的绘制和间隔。请注意,我尚未解决的顶层箭头上方的小绘图故障。

func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: Any) -> NSTableRowView? {
        if let _ = item as? Section {
            return NSTableRowView()
        } else {
            return OSFixtureTableHeaderRowView()
        }
    }

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.