На рис. 4.3 показаны два этих дополнительных элемента в табличном виде. В первой строке мы видим индикатор подробного описания, а во второй — кнопку детализации.

Рис. 4.3. Две ячейки табличного вида с различными дополнительными элементами

Если прикоснуться к любой кнопке детализации, присвоенной ячейке табличного вида, то сразу становится очевидно, что это, в сущности, самостоятельная кнопка. А теперь внимание — вопрос! Как табличный вид узнает, что пользователь нажал такую кнопку?

Как объяснялось ранее, табличный вид инициирует события, направляемые его объекту-делегату. Кнопка детализации из табличного вида также запускает событие, которое может быть принято объектом-делегатом табличного вида:

— (void) tableView:(UITableView *)tableView

accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{

/* Делаем что-либо при нажатии дополнительной кнопки. */

NSLog(@"Accessory button is tapped for cell at index path = %@",

indexPath);

UITableViewCell *ownerCell = [tableView cellForRowAtIndexPath: indexPath];

NSLog(@"Cell Title = %@", ownerCell.textLabel.text);

}

Данный код ищет ячейку табличного вида, в которой была нажата кнопка детализации, и выводит в окне консоли содержимое текстовой метки данной ячейки. Напоминаю: чтобы отобразить окно консоли в Xcode, нужно выполнить команду Run\Console (Запуск\Консоль).

<p>4.3. Создание специальных дополнительных элементов в ячейке табличного вида</p><p>Постановка задачи</p>

Дополнительных элементов, предоставляемых в iOS, недостаточно для решения задачи, и вы хотели бы создать собственные дополнительные элементы.

<p>Решение</p>

Присвойте экземпляр класса UIView свойству accessoryView любого экземпляра класса UITableViewCell:

— (UITableViewCell *) tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell* cell = nil;

cell = [tableView dequeueReusableCellWithIdentifier: MyCellIdentifier

forIndexPath: indexPath];

cell.textLabel.text = [NSString stringWithFormat:@"Section %ld, Cell %ld",

(long)indexPath.section,

(long)indexPath.row];

UIButton *button = [UIButton buttonWithType: UIButtonTypeSystem];

button.frame = CGRectMake(0.0f, 0.0f, 150.0f, 25.0f);

[button setTitle:@"Expand"

forState: UIControlStateNormal];

[button addTarget: self

action:@selector(performExpand:)

forControlEvents: UIControlEventTouchUpInside];

cell.accessoryView = button;

return cell;

}

Как видите, в этом коде используется метод performExpand:. Он играет роль селектора для каждой кнопки. Вот определение данного метода:

— (void) performExpand:(id)paramSender{

/* Обрабатываем событие нажатия кнопки */

}

В данном примере кода специальная создаваемая нами кнопка присваивается дополнительному виду в каждой строке выбранной таблицы. Результат показан на рис. 4.4.

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги