Быстрый запуск для представлений набора

Этот быстрый запуск дает Вам быстрое, практическое введение в представления набора. Основная цель представления набора состоит в том, чтобы визуально расположить группу объектов в организованный вид с каждым отдельным объектом, получив его собственное представление в большем представлении набора.

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

Это учебное руководство принимает основное понимание шаблон разработки Контроллера представления Модели, привязка и соответствие наблюдения значения ключа.

Установите проект

  1. Откройте свое приложение Какао оконное.

  2. Создайте класс модели, который будет хранить данные каждого объекта.

    Это учебное руководство использует простое PersonModel класс как класс модели в качестве примера. Каждый экземпляр этого класса состоит из двух частей данных: строковый объект представление имени лица и другой строки, представляющей их размещение. Обе из этих переменных являются свойствами и поэтому объявлены в заголовочном файле и синтезированы в файле реализации. Следующий фрагмент кода что простой заголовочный файл для a PersonModel класс был бы похож:

    #import <Cocoa/Cocoa.h>
     
    @interface PersonModel : NSObject {
        NSString * name;
        NSString * occupation;
    }
    @property(retain, readwrite) NSString * name;
    @property(retain, readwrite) NSString * occupation;
    @end

    И файл реализации:

    #import "PersonModel.h"
     
    @implementation PersonModel
     
    @synthesize name;
    @synthesize occupation;
     
    -(void) dealloc {
        [name release];
        [occupation release];
        [super dealloc];
    }
    @end

    Это PersonModel класс является хорошим примером простого объекта модели. Это инкапсулирует и обеспечивает доступ к ряду данных и KVC совместимый. Аналогично, также очень просто создать многократные экземпляры PersonModel класс, и каждый может хранить уникальные данные и быть получен доступ индивидуально. Вы, конечно, не требуетесь тиражировать этот класс в качестве примера, но он обеспечит хорошую начальную точку для понимания внутренних работ представления набора.

Сделайте представления

  1. Откройте файл пера главного окна в Интерфейсном Разработчике.

  2. Добавьте NSCollectionView возразите против окна своего приложения и измените размеры его к своим желаемым спецификациям.

    Заметьте, что два новых элемента были автоматически добавлены к Вашему перу: “Элемент Представления Набора” и новое NSView объект:

    • “Элемент Представления Набора” является контроллером, который добьется потока информации между ячейками в Вашем представлении набора и объектах модели (т.е. PersonModel объект), которые предоставляют данные для Ваших представлений. Вы сконфигурируете это позже.

    • Новое представление представляет шаблон для отдельной ячейки в Вашем представлении набора. Вам решать для конфигурирования этого представления для взгляда точно, как отдельная ячейка посмотрит в представлении набора.

      • Например, для отображения a PersonModel объект, представление должно было бы содержать две текстовых метки, каждую достаточно ширины для отображения полного имени и размещения лица. Это могло выглядеть примерно так:

        ../Art/cellTemplate.jpg
  3. Добавьте все свои требуемые объекты (текстовые метки, представления изображения, и т.д.) к недавно создаваемому представлению. Измените размеры ячейки, чтобы быть желаемым размером.

    Помните, Вы захотите вывести на экран информацию, хранящуюся в Вашем классе модели, поэтому помните это, поскольку Вы разрабатываете свое расположение ячейки. Используя PersonModel класс как пример, каждая ячейка содержит две текстовых метки (см. выше представления): метка для строки имени и метка для строки размещения.

Сделайте контроллер массива и массив

  1. Добавьте ArrayController возразите против своего пера.

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

  2. В Инспекторе Атрибутов для Вашего ArrayController, укажите режим его объектного контроллера как «Класс», дайте ему надлежащее имя для своего класса объекта модели и добавьте свойства от своей модели, что Вы хотите быть связанными с каждым представлением в NSCollectionView к «Ключевому» списку.

    Если PersonModel класс использовался, Инспектор Атрибутов контроллера массива посмотрит следующим образом:

    ../Art/arrayControllerAttributes.jpg
  3. В Вашем файле контроллера в XCode (см. примечание ниже), создайте NSMutableArray объект, и делает его свойством, как Вы сделали с данными в Вашем классе модели. Этот массив будет использоваться для хранения всех объектов, которые Вы хотите вывести на экран в Вашем представлении набора. Позже, Вы добавите методы, чтобы удостовериться, что этот массив KVO совместимый, и может быть соединен с Вашим представлением набора.

Создайте привязку контроллера массива

Необходимо связать свойство массива, которое Вы только что создали в XCode к ArrayController это существует в Вашем файле пера. Затем Ваше представление набора будет поднято трубку для отображения содержания что ArrayController в настоящее время связывается с. Поэтому любое время, которое изменение внесено в свойстве массива в Вашем файле контроллера в XCode, это инициирует изменение в ArrayController в InterfaceBuilder, который тогда инициирует изменение в Вашем представлении набора, и все останется в синхронизации. Эти следующие шаги включают использование привязки, которую не касается эта статья. Для получения дополнительной информации о привязке, посмотрите Bindings Programming Guide.

  1. Во-первых, поднимите трубку свойство массива контроллера к ArrayController объект в пере.

    Для этого щелкните по Вашему ArrayController объект, перейдите к его Инспектору Привязки и свяжите его довольный массив к Вашему объекту контроллера. Затем укажите его ключевой путь модели к тому, что имя Вашего массива. Это должно выглядеть подобным этому:

    ../Art/arrayControllerBindings.jpg
  2. Свяжите свое представление набора с Вашим контроллером массива.

    Выберите Ваш NSCollectionView объект, перейдите к окну «Bindings Inspector», и в довольном раздел, свяжите свое представление набора с опцией «Array Controller». Также необходимо указать Ключ Контроллера как «arrangedObjects». По существу это позволяет Вашему контроллеру массива говорить Вашему представлению набора отображать любые объекты, которыми управляет контроллер массива.

    ../Art/collectionViewBindings.jpg

Свяжите представления с данными

Привязка подпредставлений

Для каждого объекта (т.е. NSImageView объекты, NSTextLabel объекты, и т.д.) в Вашем Элементе Представления Набора, делают следующее:

  1. Выберите его и перейдите к его Инспектору Привязки.

  2. Свяжите подпредставление с элементом представления набора и свяжите свойство объекта подпредставлений с надлежащим свойством модели путем установки его Ключевого Пути Модели как representedObject.<your property>.

    Например, Вы связали бы этикетку с ключевым путем модели respresentedObject.name.

../Art/textFieldBindings.jpg

Завершенный и выполненный представление набора

Существует еще только два шага для подъема представления набора и выполнения. Во-первых, необходимо сделать свойство массива в классе контроллера в значении ключа XCode, наблюдающем совместимый, и во-вторых, необходимо создать некоторые данные для отображения.

  1. Сделайте свой массив KVO совместимый.

    Для этого примера мы предположим, что Вы храните все свои объекты данных (PeopleModel объекты) в массиве. Для создания этого массива KVO совместимый необходимо добавить несколько методов к классу контроллера, так, чтобы другие объекты (в этом случае, Ваш ArrayController) если изменения внесены в массив, может быть уведомлен. Если Вы используете простое, список необходимых комбинаций функций доступен в руководстве по программированию KVC, но NSMutableArray, эта группа функций должна работать:

    -(void)insertObject:(PersonModel *)p inPersonModelArrayAtIndex:(NSUInteger)index {
        [personModelArray insertObject:p atIndex:index];
    }
    
    -(void)removeObjectFromPersonModelArrayAtIndex:(NSUInteger)index {
        [personModelArray removeObjectAtIndex:index];
    }
    
    -(void)setPersonModelArray:(NSMutableArray *)a {
        personModelArray = a;
    }
    
    -(NSArray*)personModelArray {
        return personModelArray;
    }
  2. Создайте некоторые данные для своего представления набора для отображения.

    • В Вашем классе контроллера создайте -(void)awakeFromNib метод, инициализирующий объекты модели, которые Вы хотите поместить в Ваше представление набора.

    • Кроме того, в этом методе создайте NSMutableArray объект, который будет использоваться для временного содержания всех этих данных.

    • Затем добавьте каждый из своих объектов модели к Вашему недавно создаваемому массиву.

    • Когда Вы будете сделаны, используйте (void)setPersonModelArray метод для установки свойства массива в недавно заполненный массив. Установка массива инициирует обновление Вашего представления набора.

    • Демонстрационный бит кода, создающего трех человек объекты и помещающего их в массив, мог бы посмотреть следующим образом:

      - (void)awakeFromNib {
          
          PersonModel * pm1 = [[PersonModel alloc] init];
          pm1.name = @"John Appleseed";
          pm1.occupation = @"Doctor";
          
          PersonModel * pm2 = [[PersonModel alloc] init];
          pm2.name = @"Jane Carson";
          pm2.occupation = @"Teacher";
          
          PersonModel * pm3 = [[PersonModel alloc] init];
          pm3.name = @"Ben Alexander";
          pm3.occupation = @"Student";
          
          NSMutableArray * tempArray = [NSMutableArray arrayWithObjects:pm1, pm2, pm3, nil];
          [self setPersonModelArray:tempArray];
          
      }
    • Ваше представление набора должно теперь быть в порядке и выводящий на экран все Ваши объекты хорошим, организованным способом. Поздравления по случаю окончания Вашего первого представления набора!

    • При следовании PersonModel пример в этом учебном руководстве, Ваш заключительный экран мог выглядеть примерно так:

      ../Art/finalCollectionView.jpg
    • Для получения дополнительной информации о соответствии KVO посмотрите, что Значение ключа Наблюдает Руководство по программированию.

Что является следующим?

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