I have 一个小的 iPhone 应用程序,它使用导航控制器显示 3 个视图(此处全屏):
首先,它显示社交网络列表(Facebook、Google+ 等):
然后它会显示一个 OAuth 对话框,要求提供凭据:
并且(之后,在同样的UIWebView
) 权限:
最后,它显示带有用户详细信息的最后一个视图控制器(在真实的应用程序中,这将是菜单,可以在其中启动多人游戏):
这一切都运行良好,但是当用户想要返回并选择另一个社交网络时,我遇到了一个问题:
用户触摸后退按钮,不会显示第一个视图,而是显示第二个视图,再次请求 OAuth 凭据/权限。
我在这里能做什么? Xcode 5.0.2 显示了非常有限的 segues 选择 -push, modal(我不能使用它,因为它掩盖了我的游戏所需的导航栏)和custom.
我是一个iOS编程新手,但之前我开发过一个Adobe AIR 移动应用程序并且可以 1)替换视图而不是推送,2)从导航堆栈中删除不需要的视图。
请问如何在本机应用程序中执行相同的操作?
为了扩展上面的各种segue,这是我的解决方案。它具有以下优点:
- 可以在视图堆栈中的任何位置工作,而不仅仅是顶视图(不确定这实际上是否需要,甚至技术上是否可能触发,但嘿它就在那里)。
- 在显示替换之前,它不会导致弹出或转换到前一个视图控制器,它只是显示具有自然转换的新控制器,后退导航与源控制器相同的后退导航。
转接代码:
- (void)perform {
// Grab Variables for readability
UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
UIViewController *destinationController = (UIViewController*)[self destinationViewController];
UINavigationController *navigationController = sourceViewController.navigationController;
// Get a changeable copy of the stack
NSMutableArray *controllerStack = [NSMutableArray arrayWithArray:navigationController.viewControllers];
// Replace the source controller with the destination controller, wherever the source may be
[controllerStack replaceObjectAtIndex:[controllerStack indexOfObject:sourceViewController] withObject:destinationController];
// Assign the updated stack with animation
[navigationController setViewControllers:controllerStack animated:YES];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)