2016-01-09 8 views
9

Ich fand sehr einfache Möglichkeit, 3D Touch zu verwenden - überprüfen Sie "Peek & Pop" im Storyboard. Aber ich kämpfe mit einem Problem.Verwenden von 3D Touch mit Storyboard Peek und Pop

Ich habe UITableView, wenn Benutzerzelle berührt alles ok mit meinem Code funktioniert:

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

So bin ich Daten in meinem Detaillierte Controller basierend auf ausgewählte Zeilen zu füllen. Aber wenn ich mit Peek oder Pop-Methode tableView.indexPathForSelectedRow immer wieder nil (hm .. Ich habe nicht Zeile ausgewählt habe, bin ich nur Vorschau so IndexPath ist nil Ich denke). Wie kann ich diesen "peeked" -ZellenindexPath erhalten, um ihn an das Segment zu übergeben?

Oder Storyboard Peek & Pop funktioniert nicht auf diese einfache Art und ich muss vollständig peek implementieren & Pop in meinem Code?

Antwort

15

Es ist möglich, es vollständig mit dem Storyboard und prepareForSegue zu implementieren. Sie können dies tun, indem Sie das Objekt sender verwenden.

Wenn Sie davon ausgehen, dass Sie Ihr Segment direkt von der Tabellenzelle im Storyboard zum nächsten Ansichtscontroller erstellt haben, ist das Absenderobjekt vom Typ UITableViewCell. Wenn Sie das Segment programmgesteuert auslösen, denken Sie daran, das Objekt sender im Methodenaufruf zu setzen.

Sie diese Zelle einen Halt der NSIndexPath vom tableView, etwas ähnlich dem folgenden (ignorieren alle Kraft auspackt, ist dies nur zu Demonstrationszwecken) bekommen können:

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] 
    } 
} 
Verwandte Themen