我使用的是Xcode 4.5和iOS 6。
我正在构建一个使用故事板的通用应用程序。我有一个视图控制器,它在导航栏中有一个按钮。当点击按钮时,我正在使用一个segue来显示另一个视图控制器作为模式。模态视图控制器在其导航栏中有一个“取消”和一个“保存”按钮。在情节提要中,模式按钮项链接到新退出操作上的操作,该操作应展开到父视图控制器,取消模式,并调用操作处理程序。
这在iPhone上运行良好,但我在iPad上看到了问题。在iPad上,当modal以全屏显示时,一切正常。当我将模式更改为页面工作表或表单工作表(在我的情况下,这是所需的行为)时,会调用操作处理程序,但不会自动取消模式视图控制器。
有人看到过这种行为吗?你做了什么来纠正它吗?
谢谢你。
谢谢你问我这个问题,因为我刚刚遇到了同样的问题。我认为这是一个bug,但我还没有向苹果公司提交。同时,简单的解决方法是在您的展开:实现中调用dismissViewController:animated:(即,在通过退出图标连接到展开序列的操作方法中),从而降低模式视图的亮度。
我对这个解决方案唯一担心的是,如果这是一个错误并且Apple最终修复了它,他们的修复会使用此解决方案破坏任何代码吗?只有时间会告诉我们...
后期编辑:我发现了一个更好的解决方法。子类化要展开到的类的父(容器)类,并在那里实现展开。例如,在我的应用程序中,情况如下所示:
UISplitViewController
UINavigationController
MasterViewController
UINavigationController
DetailViewController ----> modal segue ----> ThirdViewController
从第三视图控制器返回到DetailViewController的退出/展开部分演示了这个错误——调用了取消:
实现,但表单视图没有被取消。但是如果我子类化UISplitViewController并在那里实现取消:
,它可以正常工作。(取消:
实现可以为空;关键是表单视图会自动被取消。)所以很明显,这是一个与容器视图控制器有关的问题,您可以通过让容器处理它来解决它。
查看我的示例项目,上传到https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p561containerViewControllerStoryboard3Bug
如果模态视图控制器被自动关闭,那就太酷了,但是在Apple的示例中,他们为segue使用了模态转换,然后明确调用dismisViewControlllerAnimated:完成:在展开(Exit)操作中解雇它。
我也有同样的问题,所以我做的是:
- (IBAction)closeSalesJournal:(UIStoryboardSegue *)segue
{
// Unwind Segue
NSLog(@"Closed Sales journal VC");
// For iPad, need to dismiss the view controller manually
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
[self dismissViewControllerAnimated:YES completion:nil];
}
}
这样,我肯定会离开iPhone的标准方式,用iPad强制解雇。