2016-01-09 16 views
9

3Dタッチを使用する非常に簡単な方法を見つけました - ストーリーボードの "Peek & Pop"をチェックしてください。しかし、私は1つの問題で苦労しています。ストーリーボードのピークとポップで3Dタッチを使用する

私は、ユーザーがセルに触れたとき、すべてが私のコードでOK取り組んでいる、のUITableViewを持っている:

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

は、だから私は、選択された行に基づいて、私の詳細なコントローラ内のデータを記入しています。しかし、PeekメソッドまたはPopメソッドを使用しているときは、tableView.indexPathForSelectedRowは常にnilを返します(hm ..私は行を選択しませんでしたので、indexPathはnilです)。どのようにして、 "peeked"セルのindexPathをsegueに渡すことができますか?

またはストーリーボードのピーク&この単純な方法ではポップが動作せず、完全にpeockを実装する必要があります& pop?

答えて

15

ストーリーボードとprepareForSegueを使用して完全に実装できます。これは、senderオブジェクトを使用して行うことができます。

ストーリーボード内の表のセルから次のビュー・コントローラーに直接segueを作成したと仮定すると、送信側オブジェクトのタイプはUITableViewCellになります。プログラムでセグをトリガーする場合は、メソッド呼び出しでsenderオブジェクトを設定することを忘れないでください。

あなたはtableViewからNSIndexPathのホールドを取得するには、このセルを使用することができ、次のようなもの(これは単なるデモンストレーション用である、すべての力をアンラップ無視):

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] 
    } 
} 
関連する問題