Dokument mówi, że metoda tableView:accessoryButtonTappedForRowWithIndexPath:
nie jest wywoływana, gdy ustawiony jest widok akcesoriów dla wiersza pod numerem indexPath
. Metoda jest wywoływana tylko wtedy, gdy właściwość accessoryView
jest zerowa i gdy używa się i ustawia właściwość accessoryType
, aby wyświetlić wbudowany widok akcesoriów. Jak rozumiem, accessoryView
i accessoryType
wzajemnie się wykluczają. Podczas korzystania z accessoryType
, system zadzwoni pod numer tableView:accessoryButtonTappedForRowWithIndexPath:
zgodnie z oczekiwaniami, ale sam musisz obsłużyć drugi przypadek.
Sposób w jaki robi to Apple, jest wyświetlany w przykładowym projekcie SDK Accessory
. W metodzie delegata źródła danych, ustawiającego obiekt docelowy/akcję na niestandardowy przycisk akcesorium. Ponieważ nie można przejść indexPath
do działania, one wywołać metodę pomocniczą, aby pobrać odpowiedni indexPath
i przekazać wynik do metody Delegat:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
...
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
...
// set the button's target to this table view controller so we can interpret touch events and map that to a NSIndexSet
[button addTarget:self action:@selector(checkButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside];
...
cell.accessoryView = button;
return cell;
}
- (void)checkButtonTapped:(id)sender event:(id)event{
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
if (indexPath != nil){
[self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
}
}
Z jakiegoś powodu, twoja konfiguracja wydaje się spadać w Walizka akcesoriów. Czy próbowałeś ustawić akcesorium z kodem zamiast korzystać z Konstruktora interfejsu?
Czy na pewno podłączone źródło danych i przekazać odpowiedniej klasy? Czy '- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath' metoda wywołania? – Thermometer
yes (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) wywoływana jest metoda indexPath. – jimbob