UIAlertView与[UIApplication sharedApplication].keyWindow.rootViewController的冲突解决

在项目开发过程中,我遇到这样的一个问题:架构是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];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.UILabel 1) label.frame //CGRectMake(x, y, width, he...
    青春flame阅读 3,957评论 0 2
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,434评论 1 14
  • 哦吼吼,又研究了几天,把FMDB这个封装好的数据库搞定了,写了个简单的例子,基于FMDB的添删改查操作,界面很一般...
    lichengjin阅读 3,720评论 0 0
  • 作者唯一QQ:228544117。。。。。 =========后面的都要新建一个文章 AppDelegate.h ...
    CC_iOS阅读 4,783评论 0 0
  • 十七岁的耿耿你好,我是十七岁的路星河。 看完《最好的我们》,没有被余淮和耿耿十多年的相互牵挂打动,也没有被路星河...
    summer大太阳阅读 3,926评论 0 0

友情链接更多精彩内容