我正在显示一个带有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
}
点击完成时,展开代码会执行。但是当我在桌子上选择一个项目时没有任何反应。
答案 0 :(得分:2)
您可以为整个视图控制器创建展开segue。为此,将segue从视图控制器objet拖到退出对象。
创建segue后,它列在文档大纲中。
选择它并在属性检查器中为其指定标识符。然后在你的代码中,当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
}
}