2015-04-17 3 views
3

У меня есть приложение, которое показывает «главы и страницы» в NSOutlineView.Всегда показывать раскрывающийся треугольник в NSOutlineView даже для пустых записей

Чтобы дать пользователю понять, что «главы» могут содержать «страницы», я хотел бы, чтобы в виде контура всегда отображался треугольник раскрытия для глав, даже если у них нет страниц (т.е. пустые) ,

Вот пример:

enter image description here

Обратите внимание, как первая глава не является пустой (страниц) и не имеет не треугольник раскрытия.

Я бы хотел, чтобы треугольник отображался так, что когда пользователи нажимают на него, они понимают, что это «контейнер», который может содержать другие элементы.

Я попытался реализовать различные методы делегатов, но не смог получить треугольник раскрытия для отображения пустых записей.

Пример проекта: https://www.dropbox.com/s/fdggjod78t0isjr/OutlineViewTest.zip?dl=0

+0

Как вы реализовали '- (BOOL) outlineView: (NSOutlineView *) outlineView isItemExpandable: (id) item' метод делегата NSOutlineView? – Astoria

+0

Я реализовал 'isItemExpandable:', чтобы возвращать YES все время. Однако он не предназначен для предметов без детей. – Mark

+0

Можете ли вы предоставить свой код? Меня интересуют методы NSOutlineViewDataSource. – Astoria

ответ

3

Хорошо, теперь я вижу. Вы используете привязки Cocoa Bindings, который предполагает, что некоторые из методов dataSource не должны вызываться. Как показано на NSOutlineViewDataSource reference page

'- (BOOL) outlineView: (NSOutlineView *) outlineView isItemExpandable: (ИН) пункт'

ВАЖНОЕ

Хотя этот метод помечен как @optional в протокол, вы должны реализовать этот метод, если вы не предоставляете данные для представления схемы с использованием привязок Cocoa.

Просто попробуйте осуществить его без привязок к какао. Или вы можете найти способ проникнуть в процесс привязки и выяснить, как отклонить удаление кнопки раскрытия.

Да, есть третий способ. Вы можете создать MyTableCellView.xib и добавить свою собственную кнопку раскрытия.

UPD

Чтобы определить, какой элемент должен иметь треугольник раскрытия, есть Leaf ключевой путь на вкладке инспектора Tree Controller атрибутов.

enter image description here

Не забудьте добавить значения моделей по вашим данным, как этот

@{@"title": @"Chapter 1 (empty)", @"isLeaf":@(NO)} 

enter image description here

+0

Спасибо за ваше предложение. Реализация без привязок - это не вариант, так как это затруднит мое приложение (это уже довольно большое приложение). Добавление моей собственной кнопки может работать, но также не кажется совершенно правильным. Я все еще надеюсь, что есть способ расширить NSOutlineView или некоторый метод делегата ... – Mark

+0

@Mark Обновлен ответ. – Astoria

+0

Ты гений! «isLeaf» сделал трюк. Благодаря! – Mark

1

Вам необходимо осуществить NSOutlineViewDelegateoutlineView:shouldShowOutlineCellForItem: и он вернется YES.

- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item { 
    return YES; 
} 

«Контурная ячейка» - это треугольник раскрытия.Вам нужно это в дополнение к, возвращающему ДА для isExpandable.

method's reference говорит:

Возвращение NO вызывает frameOfOutlineCellAtRow: вернуть NSZeroRect

И the 1st answer here about how to change the triangle image, кажется, указывает, что кадр привыкает как для ячейки и просматривать на основе взглядов контурных, так этот метод должен работать для обоих. (Обратите внимание, что более простым решением является второй ответ.)

Этот ответ вики ... Я подозреваю, что что-то пропустил.

 Смежные вопросы

  • Нет связанных вопросов^_^