Нажимать программно с помощью кнопки UIAlertView?

Я бы открыл UIViewController с помощью кнопки UIAlertView, но это не работает.

Когда пользователь завершает игру, я показываю UIAlertView с текстом и двумя кнопками: "ОК", чтобы закрыть предупреждение, и "Оценка", чтобы открыть страницу результатов.

Это настоящий UIAlertView:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"YOU WIN!"
                                                            message:[NSString stringWithFormat:@"You win a game in %d seconds!",seconds]
                                                           delegate:self
                                                  cancelButtonTitle:@"Ok"
                                                  otherButtonTitles:@"Score", nil];
        [alert show];

и это код для нажатия на представление:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    if([title isEqualToString:@"Score"]){
        ScoreViewController *score = [[ScoreViewController alloc]init];
        [[self navigationController] pushViewController:score animated:YES];
    }
}

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

PS: ScoreViewController имеет переход из корневого представления, но, конечно, я не могу создать новый из раскадровки, потому что я хочу выполнить переход программно, с помощью кнопки просмотра предупреждения.

Надеюсь, я был понятен, любая помощь будет очень признательна!


person Gio Bact    schedule 11.07.2014    source источник
comment
Непохоже, что вы вообще выполняете переход. Метод программного перехода к раскадровке performSegueWithIdentifier: sender:   -  person hgwhittle    schedule 11.07.2014
comment
ой извините вы правы! Раньше я пытался использовать segue, но это не сработало, поэтому я погуглил и нашел «pushViewController: анимированный:», а затем забыл изменить код. Я отредактирую свой вопрос, но «performSegueWithIdentifier: sender:» приведет к сбою приложения с «Thread 1: signal SIGABRT»   -  person Gio Bact    schedule 11.07.2014


Ответы (1)


Похоже, вы создаете экземпляр ScoreViewController и нажимаете на свой навигационный контроллер. Хотя это допустимый способ представления другого контроллера, он отличается от выполнения перехода раскадровки.

Во-первых, очевидно, вам нужно убедиться, что у вас есть переход, соединяющий ваши контроллеры представления в раскадровке. Похоже, вы зашли так далеко, поэтому теперь вам нужно убедиться, что у перехода есть идентификатор. Выберите переход и установите его идентификатор в инспекторе атрибутов. Затем выполните переход в коде:

[self performSegueWithIdentifier:@"YourIdentifier" sender:self];
person hgwhittle    schedule 11.07.2014
comment
Я забыл очевидную часть! ЛОЛ спасибо большое помогло. - person Gio Bact; 11.07.2014