我可以通过 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

不使用 Storyboard segues 的自定义视图转换 (Swift)

在视图控制器之间有很多segues可以吗?

故事板中的 Segues 问题