К сожалению, этот метод не вызывается, пока не будет нажат внутренний тип кнопки, предоставленный при использовании одного из предопределенных типов. Чтобы использовать свой собственный, вам нужно будет создать свой аксессуар в виде кнопки или другого подкласса 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];
}
Эта функция определяет местонахождение строки, получая местоположение в табличном представлении касания из события, предоставленного кнопкой, и запрашивая табличное представление о пути индекса строки в этой точке.