我们应该避免在两个视图之间推送segue循环吗?

gra*_*ile 5 loops objective-c segue

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

我不同意的旧设计如下

  • 我们有ViewControllerA,它包含Button"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的segue,同时从VC B到VC A.似乎故事板阻止它发生2)因此我创建了一个segue,其标识符是"gotoB",从VC A中的Button"Go to B"到VC B,以及一个segue,其标识符是"gotoA",来自Button"Go to A"在VC B到VC A.

故事板看起来像这样:

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

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

现在看来是对的,但是当我点击"转到B"时,它转到VC X.很显然,上面的popViewControllerAnimated:已经加入了VC A,而且就是这样,VC B的segue不再被触发了.结果是VC B没有像预期的那样被推入Stack.

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

nfa*_*chi 3

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