Работа с таблицей в iPhone OS

Создадим новый проект iOS Application. Выберем шаблон Single View Application.

Назовем его TableTestView.
Xcode создал нам по умолчанию два класса, один интерфейсный файл (окно приложения).  Откроем файл ViewController.xib и добавим табличку (Table View) и сохраним все изменения.


Нам нужно обязательно прописать, что наш класс удовлетворяет протоколам, по которым TableView «общается» со своими делегатами. Как вы знаете у него два делегата: dataSource и delegate. Соответственно TableView «общается» по двум протоколам. Что такое протокол — это набор методов, который может вызвать TableView. Эти протоколы называются UITableViewDataSource, UITableViewDelegate.
Теперь щелкнем по табличке правой кнопкой и укажем в качестве делегата dataSource и delegate  наш класс, т.е. он будет ответственен за «общение», предоставление данных и за обработку событий.

Теперь перейдите в ViewController.m.
Нам необходимо оформить в нашем классе три основных метода:
1. Число секций в таблице.
-(NSInteger)numberOfSectionInTableView:(UITableView *)tableView{
}
2. Число строк  в такой-то секции.
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
}
3. Заполнить ячейку информацией.
-(UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
}
Табличка требует от нас ячейку для строки по следующему пути (indexPath).
indexPath определяет какая строка и секция требуется табличке.

Чем работа с табличкой отличается от работы c таблицей в других ОС, например Windows или в других средах разработки, таких как Borland C++, delphi, visual c++ и т.д.
В Mac или iOS мы предоставляем данные по запросу от таблицы, т.е. например табличка «спрашивает» сколько должно быть секций и мы должны вернуть число.
В то время, как в других средах разработке мы предоставляем данные явно, т.е. указываем число столбцов, число строк и далее идем по каждой ячейки.

Приступим к созданию таблицы.


-(NSInteger)numberOfSectionInTableView:(UITableView *)tableView{
  return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  return 3;
}

Теперь нам нужно вернуть ячейку для строчки по следующему пути (cellForRowAtIndexPath). Что такое ячейка? Ячейка — это View(представление), прямоугольник на котором мы размещаем наши компоненты.
К счастью в iOS есть встроенный класс UITableViewCell, который создан специально для того, чтобы  представлять собой ячейку в таблице.


-(UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  NSInteger rowNumber = [indexPath row];//номер строки
  NSInteger sectionNumber = [indexPath section];//номер секции в таблице
  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  }
cell.textLabel.text =@"ячейка";
return cell;

}

Обратите внимание, как в этом методе создаются ячейки. Функция dequeueReusableCellWithIdentifier возвращает уже созданную ячейку по определенному идентификатору (CellIdentifier).
Если ячейка не создана, то она создается методами alloc и initWithStyle:reuseIdentifier:.
Ячейки, таким образом, в таблице не создаются заново, а используются повторно и показываются много раз.

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

Можем также реализовать вывод заголовка для такой-то секции.


-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
  return @"Заголовок секции";
}

Аналогично для нижней границы секции: -tableView:titleForFooterInSection.

Высота строчки.


-(CGFloat)tableView:(UITableView *)tableView heightForRowAt IndexPath:(NSIndexPath *)indexPath{
  if (indexPath.row == 1){
  return 70;
  }
 return 45;
}

Метод -tableView:willDisplayCell:forRowAtIndexPach вызывается, перед тем как ячейка будет показана на экране.


-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
  [cell setBackgrondColor:[UIColor redColor]];
}

Можно реализовать метод -tableView:didSelectRowAtIndexPath, чтобы снять выделение с ячейки. Этот метод вызывается при выделении ячейки.


-(void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

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

Вы можете оставить комментарий, или ссылку на Ваш сайт.

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