Niestety ta metoda nie jest wywoływana, chyba że zostanie naciśnięty typ przycisku wewnętrznego dostarczony podczas korzystania z jednego z predefiniowanych typów. Aby użyć własnego, musisz utworzyć swoje akcesorium jako przycisk lub inną podklasę UIControl (polecam przycisk używający -buttonWithType:UIButtonTypeCustom
i ustawiający obraz przycisku, zamiast używania UIImageView).
Oto kilka rzeczy, których używam w Outpost, który dostosowuje wystarczającą liczbę standardowych widżetów (tylko nieznacznie, aby pasowały do naszego zielonkawego zabarwienia), które ostatecznie wykonałem własną podklasę pośredniczącą UITableViewController, aby przechowywać kod narzędziowy dla wszystkich innych widoków tabel do użycia (teraz podklasy OPTableViewController).
Po pierwsze, ta funkcja zwraca nowy przycisk ujawniania szczegółów za pomocą naszej niestandardowej grafiki:
- (UIButton *) makeDetailDisclosureButton
{
UIButton * button = [UIButton outpostDetailDisclosureButton];
[button addTarget: self
action: @selector(accessoryButtonTapped:withEvent:)
forControlEvents: UIControlEventTouchUpInside];
return ( button );
}
Po zakończeniu przycisk wywoła tę procedurę, która następnie przekazuje standardową procedurę UITableViewDelegate dla przycisków akcesoriów:
- (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];
}
Ta funkcja lokalizuje wiersz, pobierając lokalizację dotyku w widoku tabeli ze zdarzenia dostarczonego przez przycisk i pytając widok tabeli o ścieżkę indeksu wiersza w tym punkcie.