закрыть modalviewcontroller, когда приложение входит в фоновый режим - PullRequest
3 голосов
/ 16 апреля 2011

мне нужно автоматически отключить мой модальный viewcontroller uiimagepicker, когда приложение входит в фон. положить его в метод приложения didenterbackground, но все равно он не работает. Кто-то может указать правильный способ сделать это

Ответы [ 3 ]

7 голосов
/ 16 апреля 2011

Попробуйте добавить наблюдатель NSNotificationCenter для UIApplicationDidEnterBackgroundNotification в UIViewController, который вы хотите удалить. Используйте селектор, чтобы отклонить модальное представление

- (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];
}
2 голосов
/ 08 марта 2013

Лучший способ удалить модальный режим, когда приложение перемещается в фоновый режим, и оно работает нормально.

- (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];
1 голос
/ 26 сентября 2011

Не думаю, что вам нужно проходить через все это.

С Документы :

If you present several modal view controllers in succession, and thus build a stack of modal view controllers, calling this method on a view controller lower in the stack dismisses its immediate child view controller and all view controllers above that child on the stack.

Попробуйте вызвать [self dismissModalViewController:NO] из родительского контроллера представления в вашей реализации - (void) viewDidUnload.

Это не проверено, но документы подразумевают, что он должен выполнить эту работу за вас.

...