【发布时间】:2014-11-06 17:20:02
【问题描述】:
假设我们有三个视图控制器:1、2 和 3。使用情节提要,使用展开转场从视图控制器 3 展开到视图控制器 1 非常简单。然而,当展开时,视图控制器 2 在视图控制器 1 显示之前短暂可见。有什么办法可以从 3 变为 1 而无需再次显示 2?
视图控制器 1:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"one did appear");
}
- (IBAction)goToTwo:(id)sender {
NSLog(@"#### segue to two");
[self performSegueWithIdentifier:@"TwoSegue" sender:self];
}
- (IBAction)unwindToOne:(UIStoryboardSegue *)sender {
}
视图控制器 2:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"two did appear");
}
- (IBAction)goToThree:(id)sender {
NSLog(@"#### segue to three");
[self performSegueWithIdentifier:@"ThreeSegue" sender:self];
}
视图控制器 3:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"three did appear");
}
- (IBAction)unwindToOne:(id)sender {
NSLog(@"#### unwind to one");
[self performSegueWithIdentifier:@"OneSegue" sender:self];
}
这会产生以下日志消息:
- 确实出现了一个
- 继续两个
- 确实出现了两个
- 继续三个
- 确实出现了三个
- 放松到一个
- 确实出现了两个
- 确实出现了一个
我尝试过使用自定义转场和禁用动画。尽管删除动画会使视图控制器 2 出现的时间更短,但它仍然会出现。有没有办法对这种行为进行编程?
故事板屏幕截图:
【问题讨论】:
-
你能显示你的故事板的截图吗? unwind segue 不应该显示中间视图。您是如何定义情节提要中的“OneSegue”的?
-
我添加了一个截图。展开转场是通过从三视图控制器图标拖动到退出图标并选择“unwindToOne”来创建的。
-
嗯……没错。您似乎已正确设置它。 SegueTwo 和 SegueThree 使用了哪些过渡? Segue 的类型。
-
我很确定这是 iOS 8 中的一个错误。我已经通过返回多个控制器对此进行了测试,并且为所有控制器调用了 viewDidAppear,但只有在你之后的控制器下一个控制器'要简短地回到节目中。这在 iOS 7 中没有发生。
-
我在 iOS 11 和 Xcode 9.3 上看到了完全相同的行为。从 A 到 B,然后从 B 到 C。从 C 到 A 展开显示了 B 的短暂闪光。我通过在
B.viewDidDisappear()中将中性背景视图带到前景来解决它。当然,这只有在中性视图与 A 的背景融合时才有效。
标签: ios objective-c iphone xcode uistoryboardsegue