美文网首页
UIAlertView与[UIApplication share

UIAlertView与[UIApplication share

作者: 伊卡洛斯_路西法 | 来源:发表于2016-01-22 18:16 被阅读2342次

在项目开发过程中,我遇到这样的一个问题:架构是tabViewController+NavigationViewController,在一个子控制器中我需要一个alertview点击后响应[self.navigationControllerpopToViewController:[self.navigationController.viewControllersobjectAtIndex:i]animated:YES];

结果报错:reason: '-[_UIAlertShimPresentingViewController setHide:]: unrecognized selector sent to instance 0x146dfeb0'

从报错的信息来看是_UIAlertShimPresentingViewController没有定义setHide函数,而我的setHide函数是定义在我的tabViewController里的,

后来追溯原因发现是因为我的子控制用到了以下两个函数(用来控制自定义的tabbar是否显示)

-(void)viewWillAppear:(BOOL)animated

{

tabViewController*tabbarcontroller = (tabViewController*)[UIApplicationsharedApplication].keyWindow.rootViewController;

[tabbarcontrollersetMyHide:YES];

}

-(void)viewWillDisappear:(BOOL)animated

{

tabViewController*tabbarcontroller = (tabViewController*)[UIApplicationsharedApplication].keyWindow.rootViewController;

[tabbarcontrollersetMyHide:NO];

}

后来发现先弹出了个alertview,再去使用keywindow,此时的keywindow.rootviewcontroller就是UIAlertShimPresentingViewController,因此无法执行setHide函数。

我的解决方案时不使用[UIApplicationsharedApplication].keyWindow.rootViewController去获取根视图,通过

self.view.window.rootViewController去获取根视图。

代码如下:

-(void)viewWillAppear:(BOOL)animated

{

tabViewController*tabbarcontroller = (tabViewController*)[UIApplicationsharedApplication].keyWindow.rootViewController;

[tabbarcontrollersetMyHide:YES];

}

-(void)viewWillDisappear:(BOOL)animated

{

tabViewController*tabbarcontroller = (tabViewController*)self.view.window.rootViewController;

[tabbarcontrollersetMyHide:NO];

}

相关文章

网友评论

      本文标题:UIAlertView与[UIApplication share

      本文链接:https://www.haomeiwen.com/subject/yzqrkttx.html