objective-c - 我们应该避免在两个 View 之间推送 segue 循环吗?

标签 objective-c loops segue

好吧,对于你们中的一些人来说,这个问题可能听起来很荒谬,但我正在和我的队友讨论 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 的“pop before push”解决方案,但它不起作用。我就是这样做的: 1) 我不能同时创建从 VC A 到 VC B 的转场和从 VC B 到 VC A 的转场。 Storyboard似乎阻止了它的发生 2) 因此,我创建了一个从 VC A 中的按钮“转到 B”到 VC B 的标识符为“gotoB”的转场,以及一个从 VC B 中的按钮“转至 A”到 VC A 的标识符为“gotoA”的转场。

所以 Storyboard 看起来像这样:

VC X ---推送---> 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的解决方案是不可行的

最佳答案

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

关于objective-c - 我们应该避免在两个 View 之间推送 segue 循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11204149/

相关文章:

c++ - 试图打破 while 循环时陷入无限循环

ios - 在 swift4 中使用 shouldPerformSegue(withIdentifier, sender) 方法时出错

ios - 在 Swift 中不使用 didSelectRowAtIndexPath 在 DetailView 中引用特定于单元格的 JSON 键

objective-c - 在 Objective-C 中定义静态常量值的类

iphone - iOS,为带有导航栏、标签栏、搜索栏和键盘的 iphone 4+5 设置表格高度始终可见?

objective-c - 有没有办法将可点击的链接打印到控制台?

c - 使用 if 语句的循环在 C 中无法正常工作

iphone - 如何将 WebDAV 合并到我的 iPhone 应用程序中?

java - 了解 Android 紧密循环/自旋挂起错误

ios - 如何传递数据以嵌入 ViewController?