2017-06-23 25 views
1

這是我的代碼。我正在嘗試執行一個賽格。我有一個酒吧按鈕項目以及一個行表執行相同的賽格表。我想知道按鈕被點擊的時間和特定行的時間。Swift準備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

你可以做的是一個屬性添加到您的UIViewController

var isSegueFromCell:Bool = false

在你didSelectRowAt方法您可以將此值分配爲true。然後,當你prepareForSegue方法被調用,你檢查:

if isSegueFromCell { 

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

OR

當你調用performSegue你可以在一個Bool表明true通過,如果從您的didSelectRow方法被稱爲

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了。您也可以在故事板中創建一個segue,方法是右鍵單擊該單元並拖動到視圖控制器,然後刪除didSelectRow實現。