iphone navigationController: ожидайте uialertview ответа прежде для выхода из текущего представления

Кажется, что эти ostr.str("") вызов добивается цели.

6
задан Mathieu 8 September 2009 в 22:06
поделиться

2 ответа

Когда вызывается viewWillDisappear, уже слишком поздно. Вы должны перехватить кнопку возврата раньше. Я никогда этого не делал, но я предлагаю установить делегата в свойстве navigationBar в вашем методе viewDidAppear:

// save the previous delegate (create an ivar for that)
prevNavigationBarDelegate = self.navigationController.navigationBar.delegate;

self.navigationController.navigationBar.delegate = self;

Не забудьте вернуть его в viewWillDisappear:

self.navigationController.navigationBar.delegate = prevNavigationBarDelegate;

Затем перехватите метод shouldPopItem:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
     if(!self.fileSaved) {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Save the file?"  delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes",nil];
         [alert show];
         [alert release];

         return NO;
     }

   if ([prevNavigationBarDelegate respondsToSelector:@selector(navigationBar:shouldPopItem:)]) 
      return [prevNavigationBarDelegate navigationBar:navigationBar shouldPopItem:item];

   return YES; 
}

И в обработчике YES диалогового окна вручную откройте контроллер:

[self.navigationController popViewController:YES];
6
ответ дан 9 December 2019 в 20:46
поделиться

Чтобы это работало, необходимо создать подкласс UINavigationController. Затем переопределите - (BOOL) navigationBar: (UINavigationBar *) navigationBar shouldPopItem: (UINavigationItem *) item. Вы должны настроить собственный протокол делегирования, который принимают контроллеры представления, и, если вы разрешите ему всплывать, вызовите свой [super navigationBar shouldPopItem:], иначе верните NO вышеуказанному методу.

4
ответ дан 9 December 2019 в 20:46
поделиться