当应用程序进入后台时,我需要自动关闭我的uiimagepicker模态视图控制器。我尝试将dismissmodalviewcontroller代码放在viewdiddissappear方法中,但它没有被调用。所以我在appdelegate中引用了这个viewcontroller,并尝试将其放在applicationdidenterbackground方法中,但仍然不起作用。有人可以指出正确的做法吗?
当应用程序进入后台时,我需要自动关闭我的uiimagepicker模态视图控制器。我尝试将dismissmodalviewcontroller代码放在viewdiddissappear方法中,但它没有被调用。所以我在appdelegate中引用了这个viewcontroller,并尝试将其放在applicationdidenterbackground方法中,但仍然不起作用。有人可以指出正确的做法吗?
- (void)viewWillAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(didEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification
object:nil];
}
- (void)viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver: self
name:UIApplicationDidEnterBackgroundNotification
object:nil];
}
- (void)didEnterBackground:(NSNotification*)note
{
[self.navigationController dismissModalViewAnimated:NO];
}
在应用程序移动到后台时,最好的方法是删除模态框,这样可以很好地解决问题。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(dismissView:)
name:UIApplicationDidEnterBackgroundNotification object:nil];
}
- (void)dismissView:(id)sender {
[self dismissModalViewControllerAnimated:YES];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
[[NSNotificationCenter defaultCenter] removeObserver: self
name:UIApplicationDidEnterBackgroundNotification
object:nil];
我觉得你不需要经历那一切。
从文档中:
如果您连续显示多个模态视图控制器,从而建立了一个模态视图控制器的堆栈,调用此方法将在堆栈中比该子视图控制器更低的视图控制器上解除其直接子视图控制器以及这个子视图控制器之上的所有视图控制器。
尝试在您实现的父视图控制器中从 - (void) viewDidUnload
调用 [self dismissModalViewController:NO]
。
这个方法没有经过测试,但文档暗示它应该适合您的需求。