Понимание табличных представлений
В наиболее общих условиях табличное представление составлено из строк и одного или более столбцов, выводящих на экран содержание сбора данных. Каждая строка представляет единственный элемент в модели данных и каждом отображения столбца определенный атрибут модели. Ячейка представляет содержание на определенном пересечении столбца строки. Пользователь выбирает строки, и приложение может выполнить соответствующие меры на тех строках.
Таблицы составлены из универсальных элементов пользовательского интерфейса, которые могут вывести на экран простые списки данных или объединить расположения, комбинирующие данные, функциональность и средства управления для обеспечения богатого пользовательского опыта. Например, простая таблица на два столбца, показанная на рисунке 1-1, использует одну ячейку, выводящую на экран изображение и текст и вторую ячейку, выводящую на экран только текст.
Построение этого простого табличного представления потребовало, чтобы никакое разделение на подклассы не вывело на экран содержание; оба представления ячейки являются экземплярами NSTableCellView
класс. Для составления подобной таблицы Вы просто перетаскиваете классы акций от Интерфейсной Библиотеки объектов Разработчика и устанавливаете значения надлежащих подпредставлений. (Можно исследовать реализацию этой таблицы в демонстрационном проекте TableViewPlayground.)
Напротив, левая область окна, показанного на рисунке 1-2, содержит представление сложной таблицы, в котором каждая строка состоит из изображения, некоторого текста, представления пользовательского цвета и кнопок. Очень, если не все, представления сложной таблицы, показанного здесь, сделаны с помощью стандартных объектов представления AppKit, располагающихся в пользовательском подклассе NSTableCellView
. (Реализация этой таблицы также содержится в демонстрационном проекте TableViewPlayground.)
Большинство таблиц основывается на NSView
Большинство таблиц NSView
основанный, что означает, что каждая ячейка предоставлена NSView
подкласс, часто NSTableCellView
(или подкласс). Некоторые таблицы NSCell
основанный, что означает, что каждая ячейка таблицы основывается на подклассе NSCell
. По большей части, NSCell
- основанные таблицы используются для поддержки устаревшего кода; при создании нового приложения Вы хотите использовать NSView
- основанные таблицы. В этом документе таблица, как предполагается, NSView
базируемый, если не указано иначе.
Используя NSView
объекты как ячейки позволяют табличным представлениям включать богатые возможности времени проектирования. По умолчанию, NSTableCellView
объект включает представление изображения и текстовое поле. Для создания табличного представления в Интерфейсном Разработчике Вы создаете ячейку для каждого столбца путем перетаскивания NSTableCellView
экземпляр от Библиотеки объектов и бросания его в надлежащий столбец таблицы. Вы тогда конфигурируете каждую ячейку, названную прототипной ячейкой, с текстом, изображениями или другими атрибутами. Во время выполнения источник данных загружает прототипную ячейку для каждой ячейки в строке и выводит на экран данные согласно Вашей конфигурации. Используя Интерфейсного Разработчика, просто изменить подпредставления ячейки, и переместить, изменить размеры, и скрыть ячейки. И когда Вы используете NSTableCellView
экземпляры в таблице, VoiceOver автоматически говорит содержание текстового поля.
Можно разделить на подклассы NSTableCellView
для добавления дополнительных подпредставлений и способов поведения, и можно использовать Интерфейсного Разработчика для изменения проекта и расположения ячейки. Используете ли Вы стандарт NSTableCellView
класс или пользовательский подкласс, приложение получает представление ячейки во время выполнения и заполняет его с данными, или программно или привязка Какао использования. Поскольку табличная ячейка повторного использования просматривает, если это возможно, представления ячейки могут варьироваться и комплекс, негативно не влияя на использование памяти.
Классы представления поддерживают анимацию в своем содержании, таким образом, это прямо для анимации содержания в NSTableCellView
экземпляры. Например, демонстрационное использование проекта TableViewPlayground NSProgressIndicator
экземпляры для отображения содержания это загружается лениво.
Таблицы поддерживают анимацию ячеек, когда они перемещены, вставлены и удалены. Различные режимы анимации предоставлены, и они могут быть сгруппированы, чтобы позволить изменениям происходить в пакетах, поскольку Вы вносите изменения в табличном представлении и соответствующих изменениях в данных модели.
Таблицы состоят из нескольких сотрудничающих классов
Табличные представления составлены из следующих классов:
Этот класс объявляет методы, позволяющие Вам конфигурировать появление табличного представления — например, указывая высоту по умолчанию строк или обеспечивая заголовки столбцов, использующиеся для описания данных в столбце. Другие методы предоставляют Вам доступ к в настоящее время выбираемой строке, а также к определенным строкам или ячейкам. Можно вызвать другие методы табличного представления, чтобы управлять выборами, прокрутить табличное представление, и вставить или удалить строки и разделы.
Класс столбца ответственен за управление горизонтальной позицией и шириной ячеек таблицы. Столбцы могут быть сконфигурированы, чтобы позволить изменять размеры, переупорядочивать, и довольный сортировка, с состоянием (дополнительно) сохраненным приложением. Каждому столбцу таблицы связали идентификатор с ним, который является ключевым при нахождении столбцов и получении ячеек. Идентификаторы обсуждены более подробно в Столбцах, и Ячейки Имеют Идентификаторы, Упрощающие Находить Их.
Класс представления заголовка ответственен за ячейку, выполняющую ее фактическую работу,
NSTableHeaderCell
. Ячейка заголовка ответственна за рисование имени столбца — если это видимо — а также само содержание заголовка, дополнительные индикаторы вида, таща выделяющийся и т.д.Эти два класса не являются частью табличного представления — и при этом они не требуются — но фактически все табличные представления выведены на экран с помощью классов, составляющих механизм представления прокрутки.
NSView
- основанные табличные представления полагаются в большой степени на два дополнительных класса (NSTableRowView
и NSTableCellView
) и их подклассы. Рисунок 1-3 показывает, как эти компоненты объединяются для создания табличного представления.
Синие строки, показанные на рисунке 1-3, выделяются как будто выбранный пользователем. Красные строки являются строками, разделенными на подклассы для рисования в их фоне пользовательским способом. Пустые или недостающие ячейки показаны в таблице и позволяются в табличных представлениях.
Табличное представление состоит из набора кратного числа NSTableRowView
экземпляры, один для каждой видимой строки. Прямоугольник кадра представления строки является полной шириной табличного представления и высотой строки, принимая во внимание intercellSpacing
. Представления строки ответственны за рисование выбора, перетаскивают обратную связь, выделение, разделители столбцов и любые дополнительные пользовательские индикаторы, которые могут требоваться, включая пользовательский фон. Каждый NSTableRowView
имеет набор подпредставлений, содержащих каждую ячейку столбца таблицы.
Можно использовать метод делегата tableView:rowViewForRow:
настроить представления строки. Вы обычно используете Интерфейсного Разработчика, чтобы разработать и разметить NSTableRowView
прототипные строки в таблице. Как с прототипными ячейками, прототипные строки получены программно во время выполнения. Реализация NSTableRowView
подклассы являются полностью дополнительными.
Каждый NSTableCellView
экземпляр вставляется как подпредставление NSTableRowView
экземпляр, представляющий всю строку. Значение по умолчанию NSTableCellView
класс имеет Интерфейсные выходы Разработчика для текстового поля и представления изображения. VoiceOver автоматически говорит содержание текстового поля, давая Вашему приложению основные возможности доступности без усилия с Вашей стороны.
Приложения обычно создают подклассы NSTableCellView
добавить дополнительные свойства; дополнительно, можно использовать пользовательский NSView
экземпляры для создания новых ячеек. Рисунок 1-4 показывает компоненты значения по умолчанию NSTableCellView
объект.
Табличное представление нужно в источнике данных и должно иметь делегата
После шаблона разработки Контроллера представления Модели, NSTableView
объект должен иметь источник данных. Для управления дисплеем данных табличное представление должно иметь делегата.
Класс источника данных (NSTableViewDataSource
) посредничает между табличным представлением и данными модели табличного представления. Источник данных ответственен за реализацию поддержки, предоставляющей данные модели в формате области монтажа, позволяющем и копирование данных и перетаскивание строк. (Обратите внимание на то, что для поддержки перетаскивания единственных строк к Средству поиска объект модели должен быть совместимым с NSPasteboardWriting
протокол.) Источник данных также ответственен за определение, допустимы ли входящие действия перетаскивания и как они должны быть обработаны.
Класс делегата (NSTableViewDelegate Protocol
) позволяет Вам настраивать поведение табличного представления, не требуя, чтобы Вы разделили табличное представление на подклассы. Это поддерживает управление столбцом таблицы и функциональность типа к выбору, и позволяет Вам указать, должны ли определенные строки позволить выбор среди других способов поведения.
Источник данных и делегат часто являются (но не обязательно) тем же объектом.
Объект источника данных должен принять NSTableViewDataSource
протокол и объект делегата должны принять NSTableViewDelegate Protocol
. Программно заполняя табличное представление, существуют методы, которые должны быть реализованы и в источнике данных и в делегате (для узнавания больше об этом, посмотрите Заполнение Табличного представления Программно).
Чтобы позволить редактировать ячеек табличного представления, используйте методологию целевого действия для редактирования содержания.
Ответственность и делегата и классов источника данных отличается, когда привязка Какао используется для заполнения таблиц — для получения дополнительной информации, посмотрите Заполнение Табличного представления Используя Привязку Какао. (Если Вы используете NSCell
- основанная таблица, ответственность источника данных и объектов делегата несколько отличаются; для узнавания больше посмотрите Работу с Находящимися в NSCell Табличными представлениями.)
Столбцы и ячейки имеют идентификаторы, упрощающие находить их
Каждый столбец в табличном представлении имеет связанную строку идентификатора, установленную в инспекторе Идентификационных данных Разработчика Интерфейса XCode редактор. Эта строка является удобным и универсальным способом относиться к и получить отдельные столбцы в табличном представлении.
Приложения обычно используют основанные на контексте имена для идентификатора столбца таблицы, такие как Художник или Имя, так, чтобы столбцы могли быть легко получены и идентифицированы другими аспектами приложения. Например, если Ваше приложение позволяет показ и сокрытие столбцов таблицы, это может легко идентифицировать столбец, который должен быть показан или скрыт при помощи идентификатора и NSTableView
класс tableColumnWithIdentifier:
метод. Если столбцы переупорядочиваются, индекс столбца в, Используя идентификаторы столбцов важно потому что tableColumns
выстройте также изменяется.
Идентификаторы столбцов связывают столбец таблицы с экземпляром представления что отображения столбца. Когда NSTableView
метод делегата tableView:viewForTableColumn:row:
попытки определить местоположение ячейки для столбца таблицы, это использует идентификатор столбца для определения местоположения ячейки. При установке идентификаторов вручную необходимо гарантировать, чтобы столбец и идентификаторы представления ячейки остались в синхронизации при изменении любого. Если значения идентификатора выйдут из синхронизации, то таблица, полагающаяся на привязку для ее данных, не будет работать. Если Вы планируете использовать привязку, рекомендуется использовать установку Automatic для значений идентификатора.
Если Ваше табличное представление не требует управления столбцами сложной таблицы, такого как получение отдельных столбцов таблицы или показ и сокрытие столбцов, можно использовать в своих интересах Автоматическую функцию Идентификатора. По умолчанию поле Identifier установлено в Автоматический. Когда Вы принимаете установку Automatic, Интерфейсный Разработчик создает уникальный идентификатор для столбца таблицы и гарантирует, что экземпляр представления ячейки в том столбце таблицы имеет тот же идентификатор. Далее, это сохраняет эти идентификаторы в синхронизации, освобождая Вас от той ответственности.
Строки повторного использования табличных представлений для увеличения скорости и эффективности
Табличные представления создают и поддерживают очередь используемых представлений ячейки, допускающих эффективное повторное использование ранее создаваемых ячеек. Представление ячейки считается в использовании если это:
В настоящее время видимо
В настоящее время выбранная ячейка (даже если это не в настоящее время видимо),
Имеет происходящее редактирование, например, текстовое поле, которое редактирует пользователь
Представления, не соответствующие используемым критериям, вставляются в очередь повторного использования.
Поскольку ячейки табличного представления инстанцируют из NSTableView
экземпляр в Интерфейсном редакторе Разработчика, каждая ячейка обрабатывается особенно, как будто это было свое собственное перо. Каждое представление ячейки имеет владельца. По умолчанию владелец представления ячейки является владельцем табличного представления по умолчанию, который обычно является делегатом таблицы.
Когда новое представление для определенного ID требуется, таблица использует процесс, который, как показывают на рисунке 1-5, нашел и возвратить требуемое представление.
При помощи очереди повторного использования табличное представление в состоянии использовать память эффективно, а также увеличить скорость, с которой получены представления ячейки.