Gangstar: West Coast Hustle - все тайное становится явным… Уроки iPhone SDK: UITableView: загрузка детализированного представления
Июл 08

В большинстве случаев, выбрав элемент из списка, пользователь загружает подробные сведения по нему в отдельном представлении. “UITableView” отвечает только за отображение списка элементов — переходы от списка к детальному представлению элемента контролирует “UINavigationController“. Таким образом, табличное представление всегда взаимодействует с контроллером навигации, и наоборот. Вот как выглядит готовое приложение:

Создание проекта

Выполнив “File -> New Project“, в разделе “iPhone OS” выберите “Navigation-Based Application“, чтобы создать новый проект XCode. Присвоив ему имя, сохраните проект (свой я назвал “TableView“). Шаблон “Navigation-Based Application” уже содержит связанные контроллер навигации и табличное представление — ручной настройки не требуется.

Источник данных

Поскольку отображаться в табличном представлении будут не 1–2 элемента, а целый список, необходим источник, содержащий наши данные — эту информацию мы передадим для обработки табличному представлению. Источником данных могут выступать файлы XML, базы или массив. Чтобы не усложнять урок, в качестве источника данных для табличного приложения выберу массив “NSMutableArray“. Для заполнения можно воспользоваться файлами XML или базой данных SQLLite. Опять же для упрощения массив будет включать строки, а не пользовательские объекты.

Первым делом создаем источник данных и добавляем в него элементы, которые будут выводиться в табличном представлении. Для создания источника данных воспользуемся методом “viewDidLoad” из контроллера “RootViewController“, вызываемого при загрузке приложения. Вот как выглядит заголовочный файл и метод “viewDidLoad” в файле реализации:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#import <UIKit/UIKit.h>

@interface RootViewController : UITableViewController {

NSMutableArray *listOfItems;
}

@end

//Задекларированный в "RootViewController.m" метод "viewDidLoad"
- (void)viewDidLoad {
[super viewDidLoad];

//Инициализация массива
listOfItems = [[NSMutableArray alloc] init];

//Добавление элементов
[listOfItems addObject:@"Iceland"];
[listOfItems addObject:@"Greenland"];
[listOfItems addObject:@"Switzerland"];
[listOfItems addObject:@"Norway"];
[listOfItems addObject:@"New Zealand"];
[listOfItems addObject:@"Greece"];
[listOfItems addObject:@"Rome"];
[listOfItems addObject:@"Ireland"];

//Настройка заголовка
self.navigationItem.title = @"Countries";
}

//Задекларированный в "RootViewController.m" метод "dealloc"
- (void)dealloc {

[listOfItems release];
[super dealloc];
}

Массив “listOfItems” декларируется в файле “RootViewController.h” и относится к типу “NSMutableArray“. Освобождается он, как показано выше, в методе “dealloc“.

В методе “viewDidLoad” выделяем память и инициализируем массив, добавляя к нему восемь объектов. Панель навигации перестраивается на представление “Countries”. Теперь нужно каким-то образом сообщить табличному представлению о необходимости отобразить находящиеся в массиве элементы

Настройка количества строк в табличном представлении

Для начала сообщаем табличному представлению о предполагаемом числе строк с помощью “tableView:numberOfRowsInSection“. Метод возвращает целое число — количество строк в табличном представлении. Поскольку массив состоит из восьми объектов, передадим массиву сообщение о подсчете. Код при этом будет выглядеть так:

1
2
3
4
//файл "RootViewController.m"
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [listOfItems count];
}

Отображение данных в табличной ячейке

Теперь, когда табличному представлению известно количество отображаемых строк, можно вывести на экран собственно текст ячейки. Напомню, что табличное представление состоит из табличных строк, а строки содержат табличные ячейки. Для этого прибегнем к помощи “tableView:cellForRowAtIndexPath“, вызвав метод n-ное число раз, где n — величина, возвращаемая в “tableView:numberOfRowsInSection“. Метод предоставляет “indexPath” (тип “NSIndexPath“). С помощью данного значения мы сможем выяснить текущий номер строки, намеченной для отображения табличным представлением. Вот как выглядит код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//файл "RootViewController.m"
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}

// Настройка ячейки...
NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];
cell.text = cellValue;

return cell;
}

В приведенном выше коде сначала при необходимости инициализируем ячейку. После этого получаем от массива строку, передавая получателю метод “objectAtIndex” с текущим номером строки. Затем “cellValue” настраивается на текст ячейки, и ячейка возвращается. Запустив приложение, увидите восемь строк в “UITableView“.

Заключение

С “UITableView” отображение списка элементов — элементарная задача, для которой достаточно настроить пару простых методов. Надеюсь, этот урок даст представление о том, с чего начинать. В следующем уроке мы рассмотрим детализированное представление и передачу ему данных.

Исходный код скачать можно [здесь]

Текст оригинальной статьи на английском языке [здесь]

Уважаемые читатели, данный материал был переведен и подготовлен к публикации проектом LookApp.ru, при публикации на другом сайте ссылка на LookApp.ru обязательна.

1 звезда2 звезд3 звезд4 звезд5 звезд (7 голосов, средний: 4.86 из 5)
Загрузка ... Загрузка ...


Оставьте комментарий