我可以通过 Segues 在视觉上完全“绕过”视图控制器吗?
Posted
技术标签:
【中文标题】我可以通过 Segues 在视觉上完全“绕过”视图控制器吗?【英文标题】:Can I visually 'bypass' a View Controller completely via Segues? 【发布时间】:2018-06-14 20:38:48 【问题描述】:短版
当我点击confirm
时,我想转到Complete Purchase
,如果用户没有存档的付款信息,请再次直接转到Gather Payment Info
而不会看到Complete Purchase
视图。我正在从Complete Purchase
调用viewDidLoad
中的第二个segue,并且我(简要地)在它继续之前看到Complete Purchase
屏幕。
更多单词
我在这里有一个相当常见的场景;具有三个不同视图控制器的购买能力。通常,用户会单击ShoppingCart.confirm
,这会导致CompletePurchase
出现“显示”转场。然后用户可以购买(这里没意思)或点击CompletePurchase.EditPaymentInfo
,这会触发到GatherPaymentInfo
的“模态”segue。关闭GatherPaymentInfo
将回到CompletePurchase
,并提供新的付款信息。
所有这些都很好,但有时用户没有任何存储的付款信息。我想要做的是,在 CompletePurchase 中,注意用户没有付款信息,并直接将他们转到GatherPaymentInfo
控制器。完成后,用户会像以前一样关闭,然后他们就可以完成购买了。
即使这样也很好,因为我在 CompletePurchase.viewDidLoad()
中执行转场。
问题是没有付款信息的用户在前往GatherPaymentInfo
屏幕的途中会短暂看到CompletePurchase
屏幕。我希望这种过渡是无缝的。
我可以在不向用户显示中间人(CompletePurchase
)的情况下执行第二次转场吗?
我已经解决了这个问题,在ShoppingCart
-> CompletePurchase
segue 之前做出决定并执行不同的segue,但感觉很不干净。
也许有更好的方法来完成这里的任务,我很想知道对此的意见以及问题的答案 - 谢谢!
没用的东西
我天真地试图在viewDidLoad()
中逃跑:
override func viewDidLoad()
if bad_condition == true
performSegue(withIdentifier: to, sender: self)
return
super.viewDidLoad()
根据需要继续进行,但在简要显示 CompletePurchase 视图之前。
【问题讨论】:
【参考方案1】:我已经通过在 ShoppingCart -> CompletePurchase segue 之前做出决定并执行不同的 segue 来解决问题,但感觉非常不干净。
我认为您的评估完全错误。如果您在这种情况下实际上不需要 CompletePurchase 视图控制器的开销,那绝对是最干净的解决方案!我会说你应该快乐地继续前进。
【讨论】:
嗯,一如既往,当人们告诉我我完全错了时,我很感激:-)。但说真的,它确实按原样工作。在其他情况下,我希望这样做,主要是这样我就可以在正确的地方结束,而不必重新检查状态并再次重定向。不过,您的观点肯定是被采纳的。谢谢。 考虑一下如果没有故事板你会做什么(过去就是这样)。您将有一个条件来决定要实例化和推送的视图控制器。在故事板segues之间进行选择是完全平行的。我看不出它有什么问题。 当然。很公平。我在这里的想法是,完成购买的“状态”需要完成购物车聚合和支付信息协调的工作。然后我如何进入 CompetePurchase 状态并不重要,它会处理所有事情。诚然,这是一个人为的要求,我非常喜欢在针头上跳舞。我怀疑它会保持原样。以上是关于我可以通过 Segues 在视觉上完全“绕过”视图控制器吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 5 上使用 Segues/Storyboard 弹出当前视图
通过 Segues,确定用户在啥视图上以及 NavigationController 按钮不出现
在视图控制器之间传递数据 - Storyboards segues