2017-06-23 17 views
1

これは私のコードです。私はセグをやろうとしている。私は同じボタンを実行する行を持つテーブルだけでなく、バ​​ーボタンアイテムを持っています。私はボタンがクリックされたときと特定の行がいつ知りたいのですか?Segueのための迅速な準備:知る方法ボタンやテーブル行がSegueを起動した場合

次のコードで何ができるかのボタンの作品ではなく、テーブルの行の

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    activePlaceRow = indexPath.row 

    performSegue(withIdentifier: "toMap", sender: nil) 

} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "toMap" 
    { 
     let mapViewController = segue.destination as! ViewController 

     if let senderObject = sender 
     { 
      if (senderObject as! UIBarButtonItem).tag == 1 
      { 

       mapViewController.activePlaceRow = -2 
      } 
      else 
      { 
       mapViewController.activePlaceRow = activePlaceRow 
      } 
     } 

    } 
} 

答えて

2

行うにsender

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    performSegue(withIdentifier: "toMap", sender: indexPath) 

} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "toMap" 
    { 
     let mapViewController = segue.destination as! ViewController 

     if let buttonItem = sender as? UIBarButtonItem, buttomItem.tag == 1 { 
      mapViewController.activePlaceRow = -2 
     } 
     else if let indexPath = sender as? IndexPath { 
      mapViewController.activePlaceRow = indexPath.row 
     } 
    } 
} 
0

はあなたdidSelectRowAt方法では、あなたのUIViewController

var isSegueFromCell:Bool = false

にプロパティを追加することですこの値をtrueとして割り当てることができます。あなたのprepareForSegueメソッドが呼び出されるときに、あなたがチェック:

if isSegueFromCell { 

    print("SEGUE FROM TABLE VIEW") 
} 
else { 
    print("SEGUE FROM BUTTON") 
} 

OR

あなたdidSelectRowメソッドから呼び出された場合、あなたはtrueを示すBoolに渡すことができますperformSegue呼び出す

performSegue(withIdentifier: "YourSegueID", sender: true) 

prepareForSegueの方法でこれを検出します

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
if let value = sender as? Bool { 
     if value { 
      print("FROM TABLE VIEW ROW") 
     } else { 
      print("FROM BUTTON") 
     } 
    } 
} 
0

一つ簡単なことではindexPathForSelectedRowindexPathsForSelectedRowsを確認することであるとしてだけでインデックスパスを渡します。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

if segue.identifier == "toMap" 
{ 
    let mapViewController = segue.destination as! ViewController 

    if let senderObject = sender 
    { 
     if (senderObject as! UIBarButtonItem).tag == 1 
     { 

      mapViewController.activePlaceRow = -2 
     } 
     else 
     { 
      mapViewController.activePlaceRow = tableView.indexPathForSelectedRow 
     } 
    } 

} 

この方法では、activePlaceRowは不要です。また、セルを右クリックしてView Controllerにドラッグし、didSelectRowの実装を削除することで、ストーリーボードにセグを作成することもできます。

関連する問題