Мне действительно нужно реализовать outlineView (_: objectForValue: byItem :)? Как? - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу реализовать контурное представление без , используя привязки Какао.

Я извлек этот урок среди некоторых других, и ни один из них не использует данныеметод источника

optional func outlineView(_ outlineView: NSOutlineView, 
             objectValueFor tableColumn: NSTableColumn?, 
                            byItem item: Any?) -> Any?

Однако в документации Apple говорится:

Хотя этот метод помечен в протоколе как @optional, необходимоРеализуйте этот метод, если вы не предоставляете данные для представления структуры, используя привязки Какао .

Для учебников, кажется, работает без этого метода. Но для чего он тогда хорош и как он должен использоваться?

(Что меня смущает, так это то, что он читает, как будто он должен вернуть объект данных, но ему передаютitem параметр в качестве входа, который является объектом данных в моем понимании.)

1 Ответ

1 голос
/ 07 апреля 2019

NSTableView / NSOutlineView и его документация беспорядок.

Параметр byItem outlineView(_:objectForValue:byItem:) - это объект, представленный строкой, а возвращаемое значение - это объект, представленный ячейкой. Сравните tableView (_: objectValueFor: row:) возвращаемое значение

Элемент в источнике данных в указанном столбце таблицы представления.

См. Также свойство objectValue NSTableCellView

Объект, представляющий данные ячейки.

objectValue автоматически устанавливается таблицей при использовании привязок или является объектом, возвращаемым методом протокола NSTableViewDataSource tableView (_: objectValueFor: row:).

В действительности при связывании содержимого табличного представления objectValue является объектом строки.

NSOutlineView.h говорит о outlineView(_:objectValueFor:byItem:):

ПРИМЕЧАНИЕ: этот метод является необязательным для OutlineView на основе вида.

документация Apple

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

действительно только для представлений на основе ячеек.

Если вы установите значение элементов управления в ячейках в outlineView(_:viewFor:item:), тогда вам не нужно будет реализовывать outlineView(_:objectValueFor:byItem:).

Реализуйте outlineView(_:objectValueFor:byItem:), если хотите использовать свойство objectValue представления ячейки. Например, при привязке значения элементов управления в ячейке и без привязки к содержимому представления структуры.

См. Также Заполнение табличного представления программно

...