您好,匿名用户
随意问技术百科期待您的加入

MBProgressHUD加在self.navigationController.view出现的诡异问题

+1 投票

在一台联通3G iPhone4s越狱手机上发现HUD有些情况不显示.我自己的移动越狱手机是好的.
系统都是5.1.1
添加HUD目的是在用户点发送时屏蔽全屏不让点击, 用法如下:
在viewDidLoad中初始化

self.HUD = [[MBProgressHUD alloc] initWithFrame:CGRectMake(0, -420+44, 320, 1000)];//挡住键盘下的绑定范围不让点击
    self.HUD.labelText = @"正在加载";
    [self.navigationController.view addSubview:self.HUD];
    [self.navigationController.view bringSubviewToFront:self.HUD];
//这里打印self.navigationController和self.navigationController.view是必然有值的!

之后用户可以有拍照操作

UIImagePickerController *imagePicker =[[UIImagePickerController alloc] init];
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.delegate = self;
        [self presentModalViewController:imagePicker animated:YES];

拍照完后竟然发现有时候self.navigationController.view是nil, 导致HUD.superview=nil.
表示非常不解! 本来想用gdb跟踪HUD.superview, 结果说没这个属性..
莫非是打开相机或者在内存警告时系统对navigationController做了些什么事?

我改成加在window上免倒是没重现问题,但是总感觉影响全局. 大家的全屏蒙板一般都加载window上么?
多谢

用户头像 提问 2012年 12月1日 @ Aquarius 上等兵 (283 威望)
分享到:

1个回答

+1 投票
 
最佳答案

navigationController是继承自UIViewController的.
打开相机之前的页面会收到内存警告而又被相机挡住,所以navigationController应该会调用viewDidUnload释放navigationController.view, 所以我的HUD.superview就为nil了.
做法要么就加到window上,要么就每次显示前都用navigationController.view addSubview

用户头像 回复 2012年 12月1日 @ Malzahar 上等兵 (335 威望)
选中 2012年 12月1日 @Aquarius
提一个问题:

相关问题

0 投票
1 回复 236 阅读
用户头像 提问 2012年 12月1日 @ Varus 上等兵 (281 威望)
0 投票
1 回复 133 阅读
用户头像 提问 2012年 12月1日 @ Xin Zhao 上等兵 (320 威望)
0 投票
1 回复 2 阅读
0 投票
1 回复 57 阅读
用户头像 提问 2012年 12月1日 @ Aries 上等兵 (238 威望)
0 投票
1 回复 34 阅读
用户头像 提问 2012年 12月1日 @ Udyr 上等兵 (341 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...