dismissViewControllerAnimated:完成:在iOS 8上
在iOS <= 7中,直接调用dismissViewControllerAnimated:completion:
会导致presentedViewController
dismissViewControllerAnimated:completion:
nil
。 在iOS 8中, presentedViewController
的ViewController仍然指向呈现的视图控制器,直到完成块被执行。
[self dismissViewControllerAnimated:NO completion:^{ //self.presentedViewController is nil }]; //self.presentedViewController is nil on iOS 7, but not nil on iOS 8
因此,在iOS 8中,我们不能依赖于presentedViewController
ViewController属性来找出哪个viewcontroller是当前顶级的可见视图控制器。
在iOS 8中,警报需要呈现给视图控制器(这引起了另一个问题 )。 他们不会显示我们试图呈现的视图控制器是否已经呈现视图控制器。
如果我刚刚解雇了我提交的UIAlertController
并在当前顶部可见的UIAlertController
(通过recursionsearch最后UIAlertController
显示UIAlertController
,那么它当然不会显示,但会logging一条错误消息:“警告:尝试呈现其视图不在窗口层次结构中!“
- 这是在iOS 8中的错误还是只是新的方式?
- 我怎样才能find我可以提出我的
UIALertController
的viewcontroller?
我find了一个解决方法来找出哪些viewcontroller我可以提出警报:
@implementation UIViewController (visibleViewController) - (UIViewController *)my_visibleViewController { if ([self isKindOfClass:[UINavigationController class]]) { // do not use method visibleViewController as the presentedViewController could beingDismissed return [[(UINavigationController *)self topViewController] my_visibleViewController]; } if ([self isKindOfClass:[UITabBarController class]]) { return [[(UITabBarController *)self selectedViewController] my_visibleViewController]; } if (self.presentedViewController == nil || self.presentedViewController.isBeingDismissed) { return self; } return [self.presentedViewController my_visibleViewController]; } @end // To show a UIAlertController, present on the following viewcontroller: UIViewController *visibleViewController = [[UIApplication sharedApplication].delegate.window.rootViewController my_visibleViewController];
- TestFlight iOS应用程序get-task-allow问题
- 您是否注意到dispatch_after在iOS设备上运行速度慢〜10%?
- iOS应用程序启动黑屏,UINavigationController,Nib,RootViewController
- 在Ionic / Phonegap中播放video(webkit-playsinline不起作用)
- 我滚动时可以将表格的tableHeaderView位置固定吗?
- 如何animation一个Sprite-Kit游戏的背景,就像Instagram的iOS应用程序的login屏幕?
- 在预处理器#if #else的两个条件下突出显示XCode语法
- 扩展中的Swift覆盖函数
- SQLite错误:复合SELECT中的术语太多