2016-01-09 35 views
9

Ho trovato un modo molto semplice per utilizzare 3D Touch: selezionare "Peek & Pop" nello storyboard. Ma sto lottando con un problema.Utilizzo di 3D Touch con lo sbirciatina e il pop dello storyboard

ho UITableView, quando l'utente tocca cella tutto sta funzionando bene con il mio codice:

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

Così sto compilando i dati in mio controller dettagliate in base a riga selezionata. Ma quando sto premendo con il metodo Peek o Pop tableView.indexPathForSelectedRow restituendo sempre nil (hm .. Non ho selezionato la riga, sto solo visualizzando l'anteprima in modo indexPath è nil immagino). Come posso ottenere che l'indice "Peeked" di IndexPath passi a seguito?

Oppure Peek dello storyboard & Pop non funziona in questo modo semplice e ho bisogno di implementare completamente il peek & pop nel mio codice?

risposta

15

È possibile implementarlo completamente utilizzando lo storyboard e prepareForSegue. È possibile farlo utilizzando l'oggetto sender.

Supponendo di aver creato i passaggi direttamente dalla cella della tabella nello storyboard al controller di visualizzazione successivo, l'oggetto del mittente sarà del tipo UITableViewCell. Se si attivano i passaggi a livello di codice, ricordarsi di impostare l'oggetto sender nella chiamata al metodo.

È possibile utilizzare questa cella per ottenere una sospensione del NSIndexPath dal tableView, qualcosa di simile al seguente (ignora tutta la forza scartare, questo è solo a scopo dimostrativo):

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