Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

return 10;

}

— (void)viewDidLoad{

[super viewDidLoad];

self.myTableView = [[UITableView alloc]

initWithFrame: self.view.bounds

style: UITableViewStylePlain];

[self.myTableView registerClass: [UITableViewCell class]

forCellReuseIdentifier: MyCellIdentifier];

self.myTableView.dataSource = self;

self.myTableView.autoresizingMask =

UIViewAutoresizingFlexibleWidth |

UIViewAutoresizingFlexibleHeight;

[self.view addSubview: self.myTableView];

}

Обсуждение

Можно

присваивать любые значения, определенные в перечне UITableViewCellAccessoryType, свойству accessoryType экземпляра класса UITableViewCell. Среди полезных дополнительных элементов следует особо отметить индикатор подробного описания и кнопку детализации [1] . Оба этих элемента содержат угловую скобку, подсказывающую пользователю, что если прикоснуться пальцем к соответствующей ячейке таблицы, то откроется новый вид или контроллер вида. Проще говоря, пользователь перейдет на новый экран с более подробной информацией об актуальном селекторе. Разница между двумя этими элементами заключается с том, что индикатор подробного описания не инициирует никакого события, а вот кнопка детализации при нажатии запускает событие, направляемое к делегату. Иными словами, эффект от нажатия кнопки не равен эффекту от нажатия самой ячейки. Следовательно, кнопка детализации позволяет пользователю осуществлять два разных, но связанных действия применительно к одной и той же строке.

1

Подробнее об этих элементах см.:— Примеч. пер.

На рис. 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 (Запуск\Консоль).

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

Постановка задачи

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

Решение

Присвойте экземпляр класса 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.

< image l:href="#"/>

Рис. 4.4. Ячейки табличного вида со специальными дополнительными видами

Обсуждение

Объект типа UITableViewCell содержит свойство accessoryView. Это тот вид, которому вы можете присвоить значение, если вас не вполне устраивают встроенные в SDK iOS дополнительные виды для табличных ячеек. После того как задано это свойство, Cocoa Touch будет игнорировать значение свойства accessoryType и станет использовать вид, присвоенный свойству accessoryView, в качестве дополнительного элемента, который отображается в ячейке таблицы.

Поделиться:
Популярные книги

Кодекс Императора II

Сапфир Олег
2. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора II

Дважды одаренный. Том V

Тарс Элиан
5. Дважды одаренный
Фантастика:
аниме
альтернативная история
городское фэнтези
5.00
рейтинг книги
Дважды одаренный. Том V

Газлайтер. Том 22

Володин Григорий Григорьевич
22. История Телепата
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Газлайтер. Том 22

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

Личный аптекарь императора. Том 4

Карелин Сергей Витальевич
4. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора. Том 4

Новые горизонты

Лисина Александра
5. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Новые горизонты

На границе империй. Том 10. Часть 10

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 10

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Родословная. Том 2

Ткачев Андрей Юрьевич
2. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 2

Гамбургский счет: Статьи – воспоминания – эссе (1914–1933)

Шкловский Виктор Борисович
Научно-образовательная:
история
5.00
рейтинг книги
Гамбургский счет: Статьи – воспоминания – эссе (1914–1933)

Бастард Императора. Том 15

Орлов Андрей Юрьевич
15. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 15

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Запрети любить

Джейн Анна
1. Навсегда в моем сердце
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Запрети любить

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2