2012-02-18 13 views
9

Próbuję użyć storyboarda/segue do obsługi przejścia między UITableView za pomocą zarówno standardowego przejścia, jak i przycisku wyświetlania szczegółów. Po przeczytaniu kilku różnych wysłane tutaj mam skonfigurować mój projekt ten sposób:IndexPath for segue from accessoryButton

  1. Tie główny segue między UITableViewCell i ViewController
  2. Tie wtórny segue od macierzystej ViewController do nowego ViewController
  3. wdrożyć accessoryButtonTappedForRowWithIndexPath następująco :

    -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 
        [self performSegueWithIdentifier:@"DetailSegue" sender:self]; 
    } 
    

to działa świetnie, a mój prepareForSegue: sender: dostaje c sprzymierzone zgodnie z oczekiwaniami. Problem polega na tym, że muszę znać właściwość indexPath dla wybranego elementu. Segue od UITableViewCell pobiera indexPath tak:

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

Niestety, gdy próbuję to zrobić po nazywany accessoryButton, która zwraca null.

Oryginalny pytanie mam oparcie część tego kodu off jest tutaj: Detail Disclosure Button and Segues

Czy istnieje metoda, która zwraca na Tableview indexPath dla accessoryButtons? Czy muszę uzyskać dostęp do indexPath w jakiś inny sposób?

Odpowiedz

16

Nie trzeba zastąpić accessoryButtonTappedForRowWithIndexPath.

W prepareForSegue, podczas pracy z przycisku ujawnienie szczegółów, zamiast:

[self.tableView indexPathForSelectedRow] 

użytku:

[self.tableView indexPathForCell:sender] 

nadawca jest już komórka ujawnienie Buttona szczegół jest.

+2

Dzięki Adam, to powinna być zaakceptowana odpowiedź! – Pat

+0

Kiedy to zrobiłem, nadawcą był TableViewController, w którym byłem. Tak więc w performSegue przekazałem komórkę jako nadawcę –

+0

jak to zrobić w Swift 3? – nyxee

13

sender argumentem jest, zgodnie z dokumentacją:

Obiekt, który chcesz użyć, aby zainicjować segue. Obiekt ten jest udostępniany do celów informacyjnych podczas rzeczywistej zmiany.

Nie widzę żadnego powodu, dlaczego nie można użyć ścieżki indeksu jako nadawcy zamiast self, a następnie uzyskać dostęp do ścieżki indeksu w prepareForSegue:.

Jeśli to nie zadziała, należy przechowywać ścieżkę indeksu w ivar i dostępu, które w prepareForSegue

+0

Przejście przez indexPath jako nadawcy działa poprawnie. Wydaje się oczywiste, gdy ktoś o tym wspomina. Dzięki. – valdarin

+0

Świetny pomysł, byłem zaniepokojony, że potrzebujemy lokalnej zmiennej, aby przekazać tę informację przez – trapper