2015-06-13 123 views
1

我正在顯示帶有UITableView控件的UIView。我通過調用performSegueWithIdentifier來顯示帶有Show segue的視圖。在調用segue的模塊中,我添加了一個我希望在展開時使用的函數,以便在從segue返回時從視圖中檢索一些數據。現在,我有一個連接到調用者函數的完成按鈕,這樣我可以在展開時從segue中檢索數據。而不是在完成按鈕完成後,我想在UITableView中選擇一個項目時執行此操作。以編程方式展開segue

在tableView(,willSelectRowAtIndexPath)中,我嘗試調用popViewControllerAnimated。第二個UIView關閉並將我帶回調用的UIView,但展開函數未被調用。

我知道如何使用Exit設置完成按鈕的展開,但我無法弄清楚如何在UITableView中的某一行上點擊。

下面是我用來執行SEGUE代碼:

@IBAction func fromButtonTap(sender: AnyObject) { 
    currentButton = sender.tag 

    self.performSegueWithIdentifier("UnitsSegue", sender: self) 
} 

下面是執行時SEGUE解纏代碼:

@IBAction func returnFromUnitSelection(segue: UIStoryboardSegue) { 
    var buttonToSet: UIButton! 
    var unitsToSet: UnitData! 

    fromLabel.text = "0" 
    toLabel.text = "0" 

    if let unitsSelectionViewController = segue.sourceViewController as? UnitSelectionController { 
     if currentButton == 0 { 
      fromUnitData = unitsSelectionViewController.selectedUnit 
      buttonToSet = fromButton 
     } 
     else { 
      toUnitData = unitsSelectionViewController.selectedUnit 
      buttonToSet = toButton 
     } 

     setButtonText(buttonToSet, firstLine: unitsSelectionViewController.selectedUnit.unitCode, secondLine: unitsSelectionViewController.selectedUnit.unitName, firstLineFontSize: 15, secondLineFontSize: 11) 
    } 
} 

下面是我用它來關閉代碼第二個UIView:

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
    selectedUnit = temperatures[indexPath.row] 
    self.navigationController?.popViewControllerAnimated(true) 

    return indexPath 
} 

展開代碼在我點擊完成時執行。但是當我在我的表格中選擇一個項目時沒有任何反應。

有什麼建議嗎?

謝謝

+0

已添加代碼。 – Scott

回答

2

您可以爲整個視圖控制器創建unwind segue。要做到這一點從視圖控制器objet拖出segue退出對象。​​

在segue創建後,它在文檔大綱中列出。

enter image description here

選擇它,並給它在屬性檢查器中的標識符。然後在你的代碼中,當tableview選擇一個單元格時,像任何其他正常的segue一樣執行這個segue。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let title = tableView.cellForRowAtIndexPath(indexPath)?.textLabel?.text 

    performSegueWithIdentifier("backToViewController1", sender: title) 
} 

然後覆蓋prepareForSegue方法將數據傳遞給第一個視圖控制器。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let identifier = segue.identifier where identifier == "backToViewController1", 
     let destination = segue.destinationViewController as? ViewController, 
      selectedTitle = sender as? String { 
     destination.selectedCountryTitle = selectedTitle 
    } 
} 
+0

謝謝。這工作。我不必重寫prepareForSegue。當我從視圖中拖動退出時,彈出窗口顯示了我的展開功能。我不確定爲什麼或如何知道顯示該特定功能。我選擇它並將performSegueWithIdentifier放入我的tableView函數中,並且它工作正常。 – Scott

+0

如果您需要將數據傳遞給第一個視圖控制器 – mustafa

+0

,覆蓋prepareForSegue是必要的爲什麼我不能從視圖控制器objet中將segue拖動到退出對象? – TomSawyer