以编程方式解开segue

时间:2015-06-13 04:21:21

标签: ios swift

我正在显示一个带有UITableView控件的UIView。我通过调用performSegueWithIdentifier以Show segue显示此视图。在调用segue的模块中,我添加了一个我想在展开时使用的函数,以便在从segue返回时从视图中检索一些数据。现在,我有一个Done按钮,它连接到调用者的函数,这样我就可以在它展开时从segue中检索数据。当点击完成按钮时,我不想这样做,我想在UITableView中选择一个项目时这样做。

在tableView(,willSelectRowAtIndexPath)中,我尝试调用popViewControllerAnimated。第二个UIView关闭并将我带回调用的UIView,但不调用unwind函数。

我知道如何使用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
}

点击完成时,展开代码会执行。但是当我在桌子上选择一个项目时没有任何反应。

1 个答案:

答案 0 :(得分:2)

您可以为整个视图控制器创建展开segue。为此,将segue从视图控制器objet拖到退出对象。 enter image description here

创建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
    }
}