Понимание табличных представлений

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

Таблицы составлены из универсальных элементов пользовательского интерфейса, которые могут вывести на экран простые списки данных или объединить расположения, комбинирующие данные, функциональность и средства управления для обеспечения богатого пользовательского опыта. Например, простая таблица на два столбца, показанная на рисунке 1-1, использует одну ячейку, выводящую на экран изображение и текст и вторую ячейку, выводящую на экран только текст.

Рисунок 1-1  простая таблица

Построение этого простого табличного представления потребовало, чтобы никакое разделение на подклассы не вывело на экран содержание; оба представления ячейки являются экземплярами NSTableCellView класс. Для составления подобной таблицы Вы просто перетаскиваете классы акций от Интерфейсной Библиотеки объектов Разработчика и устанавливаете значения надлежащих подпредставлений. (Можно исследовать реализацию этой таблицы в демонстрационном проекте TableViewPlayground.)

Напротив, левая область окна, показанного на рисунке 1-2, содержит представление сложной таблицы, в котором каждая строка состоит из изображения, некоторого текста, представления пользовательского цвета и кнопок. Очень, если не все, представления сложной таблицы, показанного здесь, сделаны с помощью стандартных объектов представления AppKit, располагающихся в пользовательском подклассе NSTableCellView. (Реализация этой таблицы также содержится в демонстрационном проекте TableViewPlayground.)

Рисунок 1-2  сложная таблица

Большинство таблиц основывается на NSView

Большинство таблиц NSView основанный, что означает, что каждая ячейка предоставлена NSView подкласс, часто NSTableCellView (или подкласс). Некоторые таблицы NSCell основанный, что означает, что каждая ячейка таблицы основывается на подклассе NSCell. По большей части, NSCell- основанные таблицы используются для поддержки устаревшего кода; при создании нового приложения Вы хотите использовать NSView- основанные таблицы. В этом документе таблица, как предполагается, NSView базируемый, если не указано иначе.

Используя NSView объекты как ячейки позволяют табличным представлениям включать богатые возможности времени проектирования. По умолчанию, NSTableCellView объект включает представление изображения и текстовое поле. Для создания табличного представления в Интерфейсном Разработчике Вы создаете ячейку для каждого столбца путем перетаскивания NSTableCellView экземпляр от Библиотеки объектов и бросания его в надлежащий столбец таблицы. Вы тогда конфигурируете каждую ячейку, названную прототипной ячейкой, с текстом, изображениями или другими атрибутами. Во время выполнения источник данных загружает прототипную ячейку для каждой ячейки в строке и выводит на экран данные согласно Вашей конфигурации. Используя Интерфейсного Разработчика, просто изменить подпредставления ячейки, и переместить, изменить размеры, и скрыть ячейки. И когда Вы используете NSTableCellView экземпляры в таблице, VoiceOver автоматически говорит содержание текстового поля.

Можно разделить на подклассы NSTableCellView для добавления дополнительных подпредставлений и способов поведения, и можно использовать Интерфейсного Разработчика для изменения проекта и расположения ячейки. Используете ли Вы стандарт NSTableCellView класс или пользовательский подкласс, приложение получает представление ячейки во время выполнения и заполняет его с данными, или программно или привязка Какао использования. Поскольку табличная ячейка повторного использования просматривает, если это возможно, представления ячейки могут варьироваться и комплекс, негативно не влияя на использование памяти.

Классы представления поддерживают анимацию в своем содержании, таким образом, это прямо для анимации содержания в NSTableCellView экземпляры. Например, демонстрационное использование проекта TableViewPlayground NSProgressIndicator экземпляры для отображения содержания это загружается лениво.

Таблицы поддерживают анимацию ячеек, когда они перемещены, вставлены и удалены. Различные режимы анимации предоставлены, и они могут быть сгруппированы, чтобы позволить изменениям происходить в пакетах, поскольку Вы вносите изменения в табличном представлении и соответствующих изменениях в данных модели.

Таблицы состоят из нескольких сотрудничающих классов

Табличные представления составлены из следующих классов:

NSView- основанные табличные представления полагаются в большой степени на два дополнительных класса (NSTableRowView и NSTableCellView) и их подклассы. Рисунок 1-3 показывает, как эти компоненты объединяются для создания табличного представления.

  Отказ рисунка 1-3 NSView- основанное табличное представление

Синие строки, показанные на рисунке 1-3, выделяются как будто выбранный пользователем. Красные строки являются строками, разделенными на подклассы для рисования в их фоне пользовательским способом. Пустые или недостающие ячейки показаны в таблице и позволяются в табличных представлениях.

Табличное представление состоит из набора кратного числа NSTableRowView экземпляры, один для каждой видимой строки. Прямоугольник кадра представления строки является полной шириной табличного представления и высотой строки, принимая во внимание intercellSpacing. Представления строки ответственны за рисование выбора, перетаскивают обратную связь, выделение, разделители столбцов и любые дополнительные пользовательские индикаторы, которые могут требоваться, включая пользовательский фон. Каждый NSTableRowView имеет набор подпредставлений, содержащих каждую ячейку столбца таблицы.

Можно использовать метод делегата tableView:rowViewForRow: настроить представления строки. Вы обычно используете Интерфейсного Разработчика, чтобы разработать и разметить NSTableRowView прототипные строки в таблице. Как с прототипными ячейками, прототипные строки получены программно во время выполнения. Реализация NSTableRowView подклассы являются полностью дополнительными.

Каждый NSTableCellView экземпляр вставляется как подпредставление NSTableRowView экземпляр, представляющий всю строку. Значение по умолчанию NSTableCellView класс имеет Интерфейсные выходы Разработчика для текстового поля и представления изображения. VoiceOver автоматически говорит содержание текстового поля, давая Вашему приложению основные возможности доступности без усилия с Вашей стороны.

Приложения обычно создают подклассы NSTableCellView добавить дополнительные свойства; дополнительно, можно использовать пользовательский NSView экземпляры для создания новых ячеек. Рисунок 1-4 показывает компоненты значения по умолчанию NSTableCellView объект.

Рисунок 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, нашел и возвратить требуемое представление.

  Логика повторного использования Представления рисунка 1-5

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