好吧,对你们中的一些人来说,这个问题可能听起来很荒谬,但我正在与我的队友讨论 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)因此,我从 VC A 到 VC B 中的按钮“Go to B”创建了一个标识符为“gotoB”的 segue,并从按钮“Go to A”创建了一个标识符为“gotoA”的 segue在 VC B 到 VC A。
所以故事板看起来像这样:
VC X ---Push---> VC A <----Push----> VC B (我需要 ViewController X 的原因在后面解释) 3)在 VC AI 中有这个:
- (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 没有按预期推入堆栈。
因此我认为实施 nfarshchi 的解决方案是不可行的