【问题标题】:Should we avoid push segue loop between two view?我们应该避免在两个视图之间推送 segue 循环吗?
【发布时间】:2012-06-26 18:40:07
【问题描述】:

好吧,对你们中的一些人来说,这个问题可能听起来很荒谬,但我正在与我的队友讨论 ios 应用程序的设计,我需要你的意见。

我不同意的旧设计如下

  • 我们有 ViewControllerA,其中包含按钮“Go To B”。该按钮有一个 PUSH segue 可以转到 B。
  • 我们有 ViewControllerB,其中包含按钮“Go To A”。按钮 有一个 PUSH segue 去 A。
  • 我们不得不经常在 2 个 ViewController 之间穿梭。

如您所见,ViewController A 和 B 之间存在一个 segue 循环,我认为我们不应该让它发生。我更喜欢通过导航栏中的“返回”按钮从 B 转到 A。

设计中的 PUSH segue 循环有多严重?在某些情况下可以接受吗?在哪里可以看到苹果推荐的好设计(如果有的话?)

编辑:我尝试了 nfarshchi 的“推送前弹出”解决方案,但它不起作用。我就是这样做的: 1)我不能同时创建从 VC A 到 VC B 的转场和从 VC B 到 VC A 的转场。故事板似乎阻止它发生 2)因此,我创建了一个标识符为“gotoB”的序列,从 VC A 中的按钮“Go to B”到 VC B,以及一个标识符为“gotoA”的序列,从 VC B 中的按钮“Go to A”到 VC A。

所以情节提要看起来像这样:

VC X ---Push---> VC A VC B (我需要 ViewController X 的原因后面会解释) 3)在VC A中我有这个:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"Prepage for segue go to B") ;
    if ([[segue identifier] isEqualToString:@"gotoB"] ) {
        [self.navigationController popViewControllerAnimated:NO];

    }
}

我需要 VC X,因为如果堆栈中只有一个 ViewController,我无法从 Stack 中弹出 ViewController。

现在看来是对的,但是当我单击“转到 B”时,它转到了 VC X。很明显,上面的 popViewControllerAnimated: 已经弹出了 VC A,仅此而已,对 VC B 的 segue 不再被触发。结果是 VC B 没有按预期推入 Stack。

因此我认为实施nfarshchi的解决方案是不可行的

【问题讨论】:

    标签: objective-c loops segue


    【解决方案1】:

    您可以这样做,但考虑一下,当您推出 UIViewController 并再次将其推入时,您将调用很多方法来重新设计它。如果你想在它们上面移动很多,最好使用UINavigationController。在这种情况下,您只需制作一次,就可以轻松地在它们之间导航。 这将使用更少的系统资源

    【讨论】:

    • 谢谢。但我认为您关于“推送前弹出”的解决方案不会奏效
    • 不,我不是说你在推送之前弹出,我是用UINavigationController 告诉你只推送一次UIViewController,你也可以有一个简单的后退按钮。并且不需要再次弹出它。 UINavigationController 会为你做这件事。
    • 假设您有ViewControllerAViewControllerB。在A 上,你可以有一个 Button 和 [self.navigationController pushViewController:viewControllerB animated:YES];
    • UINavigationController 将添加一个Back 按钮到NavigationBar,它将再次显示A。再次按下您的按钮,您将转到 B ,您无需再次使用它,只需再次显示即可。如果你提到即使ViewDidLoad 方法也不会调用两次
    • 谢谢,我明白了。所以你的解决方案和我一样,我们在 NavigationBar 中使用“Back”按钮,而不是使用 PUSH segue to B 创建新按钮。
    【解决方案2】:

    只有当过渡创建的虚拟 2D 空间是真实的时,才应使用 push/pop 过渡。如果用户连续看到 10 次推送转换,会感觉他们越来越深入到层次结构中,这可能会导致混乱和糟糕的心理模型,尤其是如果实际上你只是在两个视图控制器之间移动。

    使用后退按钮会是一个更好的解决方案,或者您可以制作自己的自定义过渡,让用户更清楚正在发生的事情。也许反向过渡也是合适的。

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 2010-09-21
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      相关资源
      最近更新 更多