如何让 ViewController 重复地与自身进行 segue。
Posted
技术标签:
【中文标题】如何让 ViewController 重复地与自身进行 segue。【英文标题】:How to get a ViewController to segue to itself repeatedly. 【发布时间】:2016-04-20 15:46:01 【问题描述】:SWIFT:在我的故事板中,嵌入在 NavigationController 中,我有一个 ViewcontrollerA,它需要重复呈现自己或基于 if 子句呈现 ViewcontrollerB。
我已经在 prepareForSegue 方法中实现了逻辑。我已经从 ViewcontrollerA 到 ViewControllerB 画了一个segue。
if (someClause == true)
let svc = segue.destinationViewController as! ViewControllerA
else
let svc = segue.destinationViewController as! ViewControllerB
执行此代码会导致以下错误: 无法将“ViewControllerB”类型的值转换为“ViewControllerA”。
那是因为从 ViewControllerA 到 ViewControllerA 没有 segue。转场是从 ViewControllerA 到 ViewControllerB。
有没有办法让一个“按钮”拥有多个 segue?一个到 ViewControllerA(本身),一个到 ViewControllerB。我知道这对于 TableViewCells 是可能的。
旁注,我已经设法获得了 instantiateViewControllerWithIdentifier,然后调用了 presentViewController 来做我想做的事,但这会破坏我的 NavigationStack 和 TabBar。我不想走这条路,因为它看起来需要大量的补丁工作。
【问题讨论】:
【参考方案1】:您应该在 ViewControllerA 和 ViewControllerB 之间创建一个 segue,而不是在 ViewControllerB 之间创建一个按钮。然后执行以下操作:
@IBAction func buttonPressed(sender: UIButton)
if (someClause == true)
// Stay on ViewControllerA
else
performSegueWithIdentifier("showB", sender: AnyObject)
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
if (segue.identifier == "showB")
let _ = segue.destinationViewController as? ViewControllerB
【讨论】:
如何创建 ViewControllerA 的新实例并继续使用它?例如,当“someClause == true) 时,我需要创建一个新的 ViewControllerA。我可以创建一个从 ViewControllerA 到 ViewControllerA 的 segue 吗? ViewControllerA 中有哪些数据?它是一个表视图吗?为什么需要创建它的新实例。 是的,它是一个表格视图...我想创建一个新实例,所以 1) 导航控制器工作正常。 IE。从堆栈中推送和弹出。 2)所有变量都被重置。 我倾向于只说 create 和 updateUI() 函数并执行 tableView.reloadData() 来完成此操作。但是,您是说它应该有一个返回到以前版本的 ViewControllerA 的按钮吗?也许你可以提供屏幕截图。 感谢您的及时回复!是的,导航返回按钮应该带我回到 ViewControllerA 的先前版本。所以 ViewControllerA(0) ViewControllerA(1) ...... ViewControllerA (n) ViewControllerB.以上是关于如何让 ViewController 重复地与自身进行 segue。的主要内容,如果未能解决你的问题,请参考以下文章
使用 P/Invoke 从 Unity 高效地与非托管代码对话
如何将用户从非 UIView 类推送到 ViewController [重复]