Заполнение табличного представления программно
Для заполнения табличного представления программно необходимо реализовать NSTableViewDataSource
и NSTableViewDelegate
протоколы. Оба протокола содержат методы, которые важны для обеспечения содержания и создания ячеек для табличного представления. В частности необходимо реализовать:
NSTableViewDataSource
метод протоколаnumberOfRowsInTableView:
, который говорит таблицу, сколько строк она должна вывести на экран.NSTableViewDelegate Protocol
методtableView:viewForTableColumn:row:
, который предоставляет таблице представление для отображения в ячейке в определенном столбце и строке. Это также заполняет ту ячейку с надлежащими данными.
Реализация источника данных
Метод источника данных требуется для таблицы работать. К счастью, реализация метода является очень прямой.
Перечисление 3-1 показывает простую реализацию метода источника данных numberOfRowsInTableView:
, который просто возвращает число элементов в массиве строк имени.
Перечисление 3-1 простая реализация numberOfRowsInTableView
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { |
return nameArray.count; |
} |
Реализация делегата
NSTableViewDelegate
ответственно за обеспечение ячейки, это выведено на экран в табличном представлении, вместе с реализацией любого целевого действия или кода уведомления так, чтобы это могло взаимодействовать с делегатом. Что следует, две простых реализации tableView:viewForTableColumn:row:
это может использоваться для отображения содержания namesArray
объект модели. Первая реализация использует объект текстового поля для ячейки табличного представления; второе использование пользовательское представление ячейки таблицы это было определено в Интерфейсном Разработчике.
В обоих из этих простых случаев никакое действие не требуется ячейкой. Но если бы представление ячейки содержало кнопки, позволило редактировать или потребовалось, чтобы взаимодействовать с делегатом, то оно должно было бы использовать целевое действие или уведомления работе. Для примера реализации некоторых из этих действий посмотрите “Комплекс TableView” пример в демонстрационном проекте TableViewPlayground.
Создание и конфигурирование ячейки NSTextField
NSTableViewDelegate
метод tableView:viewForTableColumn:row:
создает и конфигурирует ячейку, это выведено на экран в табличном представлении. Псевдокод в Перечислении 3-2 создает NSTextField
возразите как ячейка, и заполняет его с надлежащим именем для строки. (В этом примере таблица имеет только один столбец.)
Перечисление 3-2 простая реализация tableView:viewForTableColumn:row:
это возвращает текстовое поле
- (NSView *)tableView:(NSTableView *)tableView |
viewForTableColumn:(NSTableColumn *)tableColumn |
row:(NSInteger)row { |
// Get an existing cell with the MyView identifier if it exists |
NSTextField *result = [tableView makeViewWithIdentifier:@"MyView" owner:self]; |
// There is no existing cell to reuse so create a new one |
if (result == nil) { |
// Create the new NSTextField with a frame of the {0,0} with the width of the table. |
// Note that the height of the frame is not really relevant, because the row height will modify the height. |
result = [[NSTextField alloc] initWithFrame:...]; |
// The identifier of the NSTextField instance is set to MyView. |
// This allows the cell to be reused. |
result.identifier = @"MyView"; |
} |
// result is now guaranteed to be valid, either as a reused cell |
// or as a new cell, so set the stringValue of the cell to the |
// nameArray value at row |
result.stringValue = [self.nameArray objectAtIndex:row]; |
// Return the result |
return result; |
} |
Код в Перечислении 3-2 сначала вызывает makeViewWithIdentifier:owner:
, передача идентификатора @"MyView"
определить, существует ли представление ячейки, доступное в пуле resuable ячеек. Если resuable ячейка доступна, код присваивает указанную строку nameArray
оцените текстовому полю stringValue
свойство и возвраты результат.
Если никакая ячейка с идентификатором @”MyView”
доступно, новое текстовое поле создается. Кодовые наборы идентификатор нового текстового поля к @”MyView”
когда возможность возникает, так, чтобы это могло быть снова использовано. Наконец, как в первом случае, stringValue
из текстового поля установлен в корректное nameArray
значение и результат возвращаются.
Получение представления ячейки таблицы от интерфейсного разработчика
Наиболее вероятная ситуация состоит в том, что Вы разработаете ячейку в Интерфейсном Разработчике и захотите выбрать ее и затем заполнить значения в той ячейке. Реализация для этой ситуации показана в Перечислении 3-3. Этот пример предполагает, что уже существует таблица, составленная в Интерфейсном Разработчике с идентификатором столбца @”MyView”
и представление ячейки, также имеющее идентификатор @”MyView”
.
Перечисление 3-3 простая реализация tableView:viewForTableColumn:row:
это возвращает представление ячейки таблицы
- (NSView *)tableView:(NSTableView *)tableView |
viewForTableColumn:(NSTableColumn *)tableColumn |
row:(NSInteger)row { |
// Retrieve to get the @"MyView" from the pool or, |
// if no version is available in the pool, load the Interface Builder version |
NSTableCellView *result = [tableView makeViewWithIdentifier:@"MyView" owner:self]; |
// Set the stringValue of the cell's text field to the nameArray value at row |
result.textField.stringValue = [self.nameArray objectAtIndex:row]; |
// Return the result |
return result; |
Эта реализация пытается получить представление ячейки с @”MyView”
идентификатор от пула допускающих повторное использование ячеек. Если нет никакого допускающего повторное использование представления, взглядов кода в Интерфейсном Разработчике для столбца таблицы и ячейки с @”MyView”
идентификатор. После того, как найденный, makeViewWithIdentifier:owner:
метод возвращает представление ячейки и остальную часть кодовых наборов ячейка строковое значение.