Как мы можем удалить дополнительные строки из NSTableView в OS X?

Мне нужно удалить неиспользуемые линии ячеек из 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;
}

0 ответов

Используйте этот метод делегата для возврата настраиваемой строки. Таким образом вы сможете рисовать и использовать интервалы, как в примере. Обратите внимание на небольшую ошибку рисования над стрелкой верхнего уровня, которую я еще не смог исправить.

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

https://stackru.com/images/e8eb8841bde9f884a4d45d4278d896f06c13f597.png

Другие вопросы по тегам