2013-07-22 2 views
1

Я разрабатываю приложение, в котором мне нужно показать ViewController, когда я нажимаю кнопку «ОК» в UIAlertView. Как я могу это сделать?Segue после нажатия кнопки в UIAlertView

Я нашел здесь это решение: iOS Dev: Segue by pressing a button in an Alert?, но это не сработало.

Xcode говорит:

the method: presentModalViewController is deprecated 

и я нашел в Интернете, что я должен использовать метод presentViewController.

Я пытался это сделать, но он показывает мне черный экран без какого-либо взаимодействия, что не так? Я вставляю здесь свой код, может быть, вы можете мне помочь.

-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex != alertView.cancelButtonIndex) 
    { 
     PromoViewController *pvc = [[PromoViewController alloc] init]; 
     [self presentViewController:pvc animated:YES completion:nil]; 
    } 
} 

Спасибо

+0

Вы используете раскадровку или нет? – Kalpesh

+0

Я использую раскадровку – lucgian84

+0

См. Мой ответ :) он будет делать то, что вы хотите, с помощью раскадровки. – Fogmeister

ответ

0

Ну другой подход, чтобы получить экземпляр и сделать это программно, как

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" 
                 bundle: nil]; 
PromoViewController *controller = (PromoViewController*)[mainStoryboard 
        instantiateViewControllerWithIdentifier: @"<Controller ID>"]; 
[self presentViewController:controller animated:YES completion:nil]; 

Примечание Контроллер идентификатора раскадровка идентификатор установить для сцены с помощью атрибута инспектора

+0

Спасибо, что это работает! – lucgian84

+1

Да, это может сработать, но вы совершенно не понимаете смысла. :: Facepalm :: – Fogmeister

+0

@Fogmeister: не полностью отсутствует точка. Это тоже правильно. Я сказал в ответ явно: «Другой подход». Если вы пропустите это. И это никогда не ошибочно вызывает экземпляр –

2

Для того, чтобы использовать SEGUE программно нужно назвать performSegueWithIdentifier.

Сначала убедитесь, что ваш segue имеет идентификатор в раскадровке.

Затем используйте этот код вместо ...

-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex != alertView.cancelButtonIndex) 
    { 
     [self performSegueWithIdentifier:@"YourSegueIdentifier"]; 
    } 
} 

Это будет делать то, что вы хотите.

+0

Я сделал так: 1. В раскадровке я подключаю кнопку с новым ViewController, который я должен загрузить 2. В коде я вставил ваше решение Но когда я нажимаю на кнопку, которую я подключил к новому ViewController, он показывает мне новый ViewController, а затем UIAlertView – lucgian84