UIAlertView + Modal View Controller не работает - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть UIAlertView с кнопками «ОК» и «Отмена». Я хотел бы представить модальный контроллер вида при нажатии кнопки OK. Вот что я сделал до сих пор:

  1. Создан блок UIAlertView. Реализован протокол UIAlertViewDelegate. Реализован (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex метод.
  2. В приведенном выше методе, когда buttonIndex == 0, я пытаюсь сделать что-то с эффектом:

    if (buttonIndex == 0)
    {
        ModalViewController *mdvc = [[[ModalViewController alloc] initWithNibName:nil bundle:nil] autorelease];
        [self presentModalViewController:mdvc animated:YES];
    }
    

Как оказалось, модальное представление не представляет себя. Я перепробовал много других подходов, но они просто усложняют и заставляют меня создавать множество ненужных переменных. Должен быть более простой способ.

Некоторая дополнительная информация:

  1. Если это так или иначе имеет значение, это приложение OpenGL ES.
  2. Если я вызываю [self presentModalController:] в результате нажатия кнопки UIButton, он работает должным образом - я вижу контроллер модального представления.

Ответы [ 4 ]

5 голосов
/ 28 октября 2012

У меня тоже была эта проблема.Кажется очевидным, что предупреждение должно быть отключено до того, как модал может представить, поэтому вы ищете способ узнать, что предупреждение исчезло.Просматривая документы, есть простой способ.

Вместо представления вашего модального режима, когда это называется:

- (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex

Использование:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

Это работает какОчарование для меня.Из документации:

Этот метод вызывается после завершения анимации и скрытого представления.

1 голос
/ 16 сентября 2011

Хорошо ... так что я исправил это сам. Как я уже сказал, это было в приложении OpenGL ES, поэтому я установил некоторые глобальные значения bool и вызвал [self presentModalViewController] в методе drawFrame. Я знаю, что это определенно не лучший метод, но во время кризиса я не нашел лучшего решения!

Эта проблема, безусловно, связана с задержкой, но performSelector:withObject:afterDelay кажется недостаточной!

0 голосов
/ 16 сентября 2011

Кнопка «Отмена» имеет индекс 0, кнопка «ОК» будет иметь индекс 1. Вы уверены, что выполняете действие с правильным индексом кнопки? (т. е. если вы нажмете «Отмена», будет ли показано модальное значение?).

0 голосов
/ 16 сентября 2011

Сначала переместите этот код в новый метод с именем presentModal:

- (void)presentModal:(UIViewController *)mvc {
    [self presentModalViewController:mvc animated:YES];
}


Затем в методе, где вы обрабатываете ответ от UIAlertView, вызовите этот новый метод, например,

ModalViewController *mdvc = [[[ModalViewController alloc] 
                                           initWithNibName:nil 
                                                    bundle:nil] autorelease];
[self performSelector:@selector(presentModal:) 
           withObject:mdvc 
           afterDelay:0.0];


Это откладывает выполнение метода presentModal: до тех пор, пока не будет возвращена обработка метода UIAlertView и после удаления UIAlertView с экрана.

...