2016-01-09 22 views
9

Znalazłem bardzo prosty sposób korzystania z 3D Touch - zaznacz "Peek & Pop" w storybooku. Ale zmagam się z jednym problemem.Używanie 3D Touch z podglądem i popisem scenki

Mam UITableView, kiedy użytkownik dotyka komórki wszystko działa ok z mojego kodu:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showDetail" { 
     print(tableView.indexPathForSelectedRow) 
    } 
} 

Więc jestem wypełnienie danych w moim Szczegółowa kontrolera na podstawie wybranego wiersza. Ale kiedy naciskam przy pomocy Peek lub Pop metody tableView.indexPathForSelectedRow zawsze zwracając zero (hm .. Nie wybrałem wiersza, jestem tylko podglądu tak, że IndexPath jest nil Chyba). Jak mogę uzyskać "peeked" cell indexPath, aby przekazać go do segregowania?

Peek storyboarda & Pop nie działa w ten prosty sposób i muszę w pełni wdrożyć peek & w moim kodzie?

Odpowiedz

15

Możliwe jest pełne wdrożenie za pomocą scenorysu i prepareForSegue. Możesz to zrobić, korzystając z obiektu sender.

Zakładając, że utworzono segue bezpośrednio z komórki tabeli w serii ujęć do następnego kontrolera widoku, obiekt nadawcy będzie typu UITableViewCell. Jeśli uruchamiasz programowo przełączanie, pamiętaj o ustawieniu obiektu sender w wywołaniu metody.

Możesz użyć tej komórki, aby uzyskać luku NSIndexPath z tableView, coś podobnego do poniższego (ignoruje wszystkie siły odwijania, to tylko w celach demonstracyjnych):

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) { 
    let cell = sender as! UITableViewCell 
    let indexPath = tableView.indexPath(for: cell)! 
    if segue.identifier == "mySegue" { 
     let destination = segue.destination as! DetailsViewController 
     destination.model = self.model[indexPath.row] 
    } 
}