2016-11-17 10 views
2

私はprepare(for segue:)を使って現在のtableviewcontrollerから目的地に情報を渡すコードを設定しました。これは、テーブル内のいずれかのセルが選択されたときに使用するために用意されていますが、これはViewControllerからの唯一のセグではありません。ボタンをクリックすると他のセグが出てきますが、情報のパスを設定する方法は、セグのための一般的なものだと思います...ボタンセグがクリックされたときに、コードが設定されていることをアプリが予期しているセルのセグからVCを見ることができます。アプリがクラッシュしないのでどのようにして私のコードを設定して、機能の準備がどのストーリーボードのセグー(一般的にはそうだと思う)ではなく、セルのセグーに一般的にならないようにしますか?特定のセグに特定のセグを準備する方法は?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let indexPath = self.tableView.indexPathForSelectedRow 
     let rowSelectedd = indexPath 
     let destViewController: MainPageCellSelectedViewController = segue.destination as! MainPageCellSelectedViewController 
     destViewController.rowSelected = rowSelectedd! 
    } 
    var rowSelectedd = IndexPath() 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     performSegue(withIdentifier: "cellSelected", sender: rowSelectedd) 
    } 

私は問題はfor segue: UIStoryboardSegueが特定されていない中で(私が間違っているなら、私を修正)であると信じて、私はそこにIDを設定する方法がわからない:ここでは電流が設定されています。

答えて

2

これを正しく設定した場合、segueにはこの目的のための識別子があります。識別子をチェックし、それは間違ったものですかどうかを弓:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard segue.identifier == "cellSelected" else {return} 
    // ... 
} 
1

あなたは識別子を使用することができますが、私は、文字列識別子およびその非常にないswiftyを使用して嫌い。私はほとんどの場合、宛先ビューコントローラのタイプをでチェックすることによって、セグを曖昧さのないものにすることができますか?であり、送信者のタイプがの場合、または(複数のUIButtonsの場合)オペレータ===です。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let destination = segue.destination as? DetailViewController { 
     if sender is UITableViewCell { 
      destination.mode = .view 
     } else if sender === plusButton { 
      destination.mode = .add 
     } else if sender === editButton { 
      destination.mode = .edit 
     } 
    } 
} 
関連する問題