以编程方式展开 segue
Posted
技术标签:
【中文标题】以编程方式展开 segue【英文标题】:Programmatically unwind segue 【发布时间】:2015-06-13 04:21:20 【问题描述】:我正在显示一个带有 UITableView 控件的 UIView。我通过调用 performSegueWithIdentifier 以 Show segue 显示此视图。在调用 segue 的模块中,我添加了一个我想在展开时使用的函数,以便在从 segue 返回时从视图中检索一些数据。现在,我有一个 Done 按钮,它连接到调用者的函数,这样我可以在 segue 展开时从 segue 中检索数据。我不想在点击完成按钮时执行所有这些操作,而是希望在 UITableView 中选择一个项目时执行此操作。
在 tableView(,willSelectRowAtIndexPath) 中,我尝试调用 popViewControllerAnimated。第二个 UIView 确实关闭并将我带回调用 UIView,但未调用展开函数。
我知道如何从完成按钮设置展开,使用退出,但我不知道如何在点击 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】:您可以为整个视图控制器创建展开转场。为此,将 segue 从视图控制器对象拖动到退出对象。
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
【讨论】:
谢谢。这行得通。我不必重写 prepareForSegue。当我从视图中拖动退出时,会显示一个带有我的展开功能的弹出窗口。我不太确定它为什么或如何知道显示该特定功能。我选择了它并将 performSegueWithIdentifier 放在我的 tableView 函数中,它起作用了。 如果您需要将数据传递给第一个视图控制器,则需要覆盖 prepareForSegue 为什么我不能将 segue 从视图控制器对象拖到退出对象? 您必须右键单击并从视图控制器拖动才能退出以上是关于以编程方式展开 segue的主要内容,如果未能解决你的问题,请参考以下文章