На жаль, цей метод не викликається, якщо не натиснути внутрішній тип кнопки, який використовується при використанні одного з попередньо визначених типів. Щоб використовувати власний, вам доведеться створити ваш аксесуар у вигляді кнопки або іншого підкласу UIControl (я б рекомендував використовувати кнопку -buttonWithType:UIButtonTypeCustom
та встановити зображення кнопки, а не використовувати UIImageView).
Ось декілька речей, які я використовую в Outpost, в якому налаштовується достатня кількість стандартних віджетів (лише трохи, щоб відповідати нашому розмальовуванню чирок), що я завершив, роблячи власний підклас UITableViewController посередника, щоб утримувати утилітний код для всіх інших представлень таблиць для використання (вони тепер підкласи OPTableViewController).
По-перше, ця функція повертає нову кнопку розкриття деталей за допомогою нашої спеціальної графіки:
- (UIButton *) makeDetailDisclosureButton
{
UIButton * button = [UIButton outpostDetailDisclosureButton];
[button addTarget: self
action: @selector(accessoryButtonTapped:withEvent:)
forControlEvents: UIControlEventTouchUpInside];
return ( button );
}
Після завершення кнопка викликає цю процедуру, яка подає стандартну процедуру UITableViewDelegate для кнопок аксесуара:
- (void) accessoryButtonTapped: (UIControl *) button withEvent: (UIEvent *) event
{
NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: [[[event touchesForView: button] anyObject] locationInView: self.tableView]];
if ( indexPath == nil )
return;
[self.tableView.delegate tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
}
Ця функція визначає рядок, отримуючи розташування у поданні таблиці дотику від події, передбаченої кнопкою, і запитує подання таблиці на шлях індексу рядка в цій точці.