2015-04-17 2 views
1

Я очень новичок в разработке iOS, поэтому, пожалуйста, простите меня, если я спрошу что-то глупое.iOS: отобразите новую сцену после нажатия кнопки alertView

Таким образом, в одной сцене (скажем, S1) после нажатия кнопки alertView будет отображаться два варианта: YES и No. После того, как вы нажмете YES и отпустите alertView, я хочу отобразить новую сцену (S2), а не вернуться к исходному S1.

Что я пытался, я перетащил ViewController (S2) в раскадровку и добавил в проект новый файл (cocca touch class -> подкласс UIViewController) (например, s2controller.h и s2controller.m). Затем я выбрал новую сцену S2 в раскадровке и в инспекторе идентификации меняю свой класс на s2controller. Затем я добавил несколько кнопок в S2, чтобы не пустая сцена. И я вернулся в S1controller.m файл и импорта s2controller.h и добавьте следующий код:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
// YES button is clicked 
    if (buttonIndex == 1) { 

     // Push the view controller. 
     S2Controller *s2 = [[S2Controller alloc] init]; 
     [self.navigationController pushViewController:s2 animated:YES]; 

     NSLog(@"Push new scene successful."); 
    } 
    else{ 
     // do something 
    } 
} 

Там не было никакой ошибки компиляции. Когда я тестировал его с помощью симулятора, после того, как я нажал «ДА» из alertView, экран стал черным, но я вижу, что панель навигации все еще там. Я могу нажать кнопку возврата на панели навигации, чтобы вернуться к сцене S1. Мой вопрос: могу ли я исправить это, добавив или отредактировав какой-то код, или это вся идея не так с самого начала?

ps: Я использую только раскадровку для создания всех сцен, у меня нет файла nib в проекте.

ps2: обе сцены S1 и S2 есть контроллер навигации встроенный.

ответ

0

Вы создаете новый S2Controller, не видя, что он отличается от объекта S2Controller в раскадровке. Вы должны сделать ссылку на контроллер раскадровки и создать экземпляр S2Controller с этой ссылкой (идентификатор раскадровки).

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; 
S2ViewController *controller = [storyboard [email protected]"S2ViewController"]; 
[self.navigationController pushViewController:controller animated:YES]; 

enter image description here

+0

Большое спасибо, это определенно помогает! –

0
S2Controller *s2 = [[S2Controller alloc] init]; 

Хорошо до сих пор, за исключением того, , что это не то же самое S2Controller интерфейс которого вы выдержан в раскадровке, так вот почему он черный, когда вы нажимаете ее.

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

Или еще лучше, сделать это: сделать SEGUE (толчок SEGUE) от S1 к S2 в раскадровке, и дать это идентификатор. Тогда, чтобы пойти туда, вам не нужно создавать ничего; вы просто запускаете сеанс, вызывая performSegueWithIdentifier:sender:.

+0

И посмотрите в моей книге объяснение того, как работают раскадровки: http://www.apeth.com/iOSBook/ch19.html#_storyboards. На самом деле вам стоит остановиться и прочитать эту целую главу, прежде чем идти дальше (хотя, честно говоря, вы до сих пор хорошо себя зарекомендовали!). – matt

+0

Огромное спасибо за все детали. Я пойду, посмотрю ссылку. –

Смежные вопросы