ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 2

7. Таблицы UITableView

Самая простая таблица (UITableView)

Таблицы являются базой для большинства списков выбора на iOS. Почта, список контактов, последние звонки  — все эти приложения используют возможности класса UITableView. Чаще всего таблицы используются вместе с UINavigationController, который обеспечивает навигацию между таблицей и детальным представлением элемента, но бывают и исключения о которых я расскажу позже. Xcode содержит уже готовый шаблон (Navigation-Based Application) в котором имеются связанные контроллер навигации и табличное представление. Ниже представлен результат нашей будущей работы.

 

 

Для начала создадим новый проект, как я уже говорил из шаблона Navigation-Based Application и назовем его TableView.

 

Таблица имеет три основных составляющие: саму таблицу, разделы таблицы (или группировки) и ячейки таблицы (отдельные строки в таблице). Данные в таблицы помещяются в очередь из источника данных таблицы. Источник данных — это объект, предоставляющий таблице информацию о том, какие данные отображать, например, имена файлов, сообщения электронной почты и т. д. Для облегчения понимания работы с таблицей возмем обычный массив, в который будут включены только строки.

 

Чтобы создать наш источник данных в интерфейсе класса RootViewController объявите переменную students и укажите ей тип NSArray. Затем добавьте для этой переменной свойства и методы доступа (как это сделать я уже описывал здесь).

 

В методе viewDidLoad инициализируем массив на основании пяти объектов строкового типа, а панели навигации даем имя Students. Теперь наш метод viewDidLoad  выглядит так:

 

<code data-result="[object Object]">- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"Students";

    self.students = [NSArray arrayWithObjects:@"Tom", @"Bill", @"Tom", @"Joe", @"Tom", nil];
}</code>

 

В первую очередь, следует указать сколько секций будет в нашей таблице. Делается это с помощью метода numberOfSectionsInTableView:

 

<code data-result="[object Object]">- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}</code>

 

Чтобы «сказать» нашей таблице сколько в ней будет строк (а их будет столько же, сколько и элементов в источнике данных) используйте метод numberOfRowsInSection:

 

<code data-result="[object Object]">- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [students count];
}</code>

 

Теперь нам нужно заполнить ячейки нашей таблицы. Для заполнения воспользуемся методов cellForRowAtIndexPath. Он предоставляет нам “indexPath” (тип “NSIndexPath“). С помощью данного значения мы сможем выяснить текущий номер строки, чтобы заполнить ее элементом источника с таким же индексом. В самом методе cellForRowAtIndexPath уже имеется код, отвечающий за поиск и создание ячейки. Более того, Xcode вставил комментарий в том месте, где нам следует изменять ячейку («// Configure the cell.«) Давайте заменим этот комментарий на наш код. Теперь метод cellForRowAtIndexPath выглядит так:

 

<code data-result="[object Object]">- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    //Поиск ячейки
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    //Если ячейка не найдена
    if (cell == nil) {
        //Создание ячейки
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                       reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = [students objectAtIndex:indexPath.row];

    return cell;
}</code>

 

Наш пример готов к работе, можете смело запускать проект на выполнение и наслаждаться результатом.

 

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