Переход между 2 раскадровками - PullRequest
3 голосов
/ 29 ноября 2011

У меня есть 2 файла раскадровки в моем приложении, и я хотел бы перейти от ViewController в одном к ViewController в другом.Я подключил IBAction в ответ на нажатие кнопки на первом ViewController, который вызывает метод в AppDelegate.Я проверил, что этот сигнал достигает метода AppDelegate.

Вот соответствующий метод, который у меня есть в AppDelegate, однако никакого перехода не происходит.Может кто-нибудь сказать мне, почему, или это глупо иметь 2 раскадровки?

-(void) presentSecondViewController {

UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController* mainViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"main_viewcontroller"];

UIStoryboard* secondStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil];
UIViewController* secondViewController = [secondStoryboard instantiateViewControllerWithIdentifier:@"second_viewcontroller"];

[mainViewController presentViewController: secondViewController animated:YES completion: NULL];

}

1 Ответ

8 голосов
/ 29 ноября 2011

Вы создаете второй экземпляр начального контроллера представления первой раскадровки.Этот экземпляр никогда не показывался на экране, так как он отличается от того, который уже был показан, и поэтому, вероятно, не будет отображать ваш второй контроллер вида.Вам нужен экземпляр контроллера вида, который уже показан.Лучшим способом было бы изменить реализацию на

-(void) presentSecondViewControllerFromViewController:(UIViewController *)sourceController
{
    UIStoryboard* secondStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil];
    UIViewController* secondViewController = [secondStoryboard instantiateViewControllerWithIdentifier:@"second_viewcontroller"];

    [sourceController presentViewController: secondViewController animated:YES completion: NULL];
}

и вызвать ее, передав контроллер представления, содержащий кнопку.

...