Программирование под iPhone, iPad Objective-C уроки на русском статьи новости

2011-05-14 02:47


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

 

 

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

 

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

 

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

 

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

 

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"Students";
    
    self.students = [NSArray arrayWithObjects:@"Tom", @"Bill", @"Tom", @"Joe", @"Tom", nil];
}

 

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

 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

 

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

 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [students count];
}

 

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

 

- (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;
}

 

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

 

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


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