Подтвердить что ты не робот

Странное поведение с использованием NSOutline (Sourcelist) на основе представления

У меня есть (новый в Lion), основанный на представлении NSOutlineView, как боковой список SourceList в моем приложении с использованием CoreData + NSTreeController + Bindings + NSOutlineView и объекта как NSOutlineViewDelegate.

Я использую эти методы делегата в делегате outlineview:

- (BOOL) outlineView: (NSOutlineView *) outlineView isGroupItem: (id) item В моем случае элемент является группой, когда родительское отношение (Core Data) равно nil.

- (NSView *) outlineView: (NSOutlineView *) outlineView viewForTableColumn: (NSTableColumn *) tableColumn item: (id) item Чтобы вернуть представление (группа) или вид datacell в виде заголовка (значок + текст).

И я задал стиль размера представления схемы (в Interface Builder в XCode) как "Боковая панель по умолчанию", поэтому cellview меняет свой размер, когда пользователь меняет его в настройках системы.

Он отлично работает... но есть несколько проблем:

enter image description here

  • Первый cellview - это ячейка группы (ячейка заголовка), а при расширении - сбой текстовое поле для этого представления ячейки перемещается вверх-вниз. Только с первым.

  • Текстовое поле в ячейках заголовка меняет его размер (при изменении размера в настройках системы), но я хотел бы, чтобы размер ячеек заголовка оставался фиксированным, как (Lion) Finder, Mail... делает.

  • Строковое значение текстового поля в ячейках заголовка не отображается в верхнем регистре.

  • Изображения, которые я использую как значок в представлении изображений ячеек данных, кажутся прозрачными (с 0,5 альфа-значением или что-то в этом роде).

Любая помощь? Спасибо заранее

РЕШИТЬ:

  • Для перемещения, когда в первом сотовом представлении развернуть/свернуть, используйте метод setFloatsGroupRows: NO с контурным просмотром (спасибо Anton!)

  • Если вы хотите фиксированный размер шрифта групповых ячеек (даже если пользователь меняет его в настройках системы), отвяжите в IB ячейку заголовка со своим представлением ячейки таблицы.

  • Используя значениеTransformer (преобразующее строку в верхний регистр) с ячейкой заголовка, строка будет отображаться в верхнем регистре. Также вы можете сделать это с помощью метода данных nsoutlineview datasource - outlineView: objectValueForTableColumn: byItem:...

  • И наконец, значок полупрозрачен, потому что не включен. Снимите флажок "Условные наборы разрешены" в пути значений или значений (в зависимости от того, который вы используете) в привязках ячеек изображения

4b9b3361

Ответ 1

Настройка setFloatsGroupRows: NO для контурного представления должна решить проблему с перемещением первого элемента группы вверх при распаковке/сбрасывании.

Ответ 2

Если это не очевидно никому:

"Поплавки групп строк" ​​в интерфейсе Builder:

Вы можете установить "Группы групп поплавков" непосредственно в Interface Builder.

  • выберите свой список источников в контуре интерфейса Builder.

  • покажите инспектор атрибутов, и вы увидите флажок "Поля группы". Отбросьте это, и ваши неприятные группы прыгающих групп внезапно ведут себя:)

В Swift:

В качестве альтернативы, если вы находитесь в Swift, вы можете сделать что-то вроде:

@IBOutlet weak var sourceList: NSOutlineView!    
sourceList.floatsGroupRows = false

Ответ 4

Мне было интересно, как вы достигли списка источников, которые видны на скриншоте.

Я создал небольшой примерный проект, который делает то же самое и включает обратную связь от @anton-ivanov:

  • Отобразить список элементов
  • Отредактируйте элементы в режиме мастер-детали.
  • Удалить и добавить элементы
  • Использование привязок

Отметьте besi/mac-quickies в github. Большая часть материала либо выполняется в IB, либо может быть найдена в AppDelegate

screenshot