Как загрузить контроллер представления входа в систему из делегата приложения - PullRequest
5 голосов
/ 14 марта 2012

Вот ситуация. У меня есть NSTimer в Appdelegate.m, который выполняет метод, который проверяет местоположение пользователя и выводит его из системы, если он находится за пределами региона. Когда это произойдет, я хочу загрузить контроллер вида входа в систему. Тем не менее, с помощью следующих строк кода, я могу видеть VC, но если я нажимаю на текстовое поле для ввода текста, я получаю Sigbart. Любые идеи, как правильно загрузить начальный VC из приложения делегата?

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
            LoginViewController *loginViewController = (LoginViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];
            [self.window addSubview:loginViewController.view];
            [self.window makeKeyAndVisible];

Ответы [ 3 ]

12 голосов
/ 02 мая 2012

Я боролся с этим совсем немного.Вот что сработало для меня

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
LoginViewController *loginViewController = (LoginViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];

//set the root controller to it
self.window.rootViewController = loginViewController

Если у вас все еще есть ошибки, это связано с вашим LoginViewController, а не с переходом AppDelegate.Надеюсь, это поможет.

4 голосов
/ 12 июня 2013

И аудиофильный, и подход Флавиу в порядке.Но вам обоим не хватает одной дополнительной строки кода.

Я обнаружил, что вы должны сначала выделить и инициализировать объект UIWindow.Я не знаю, почему, но инициализация объекта решила проблемы.

self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

аудиофильный подход:

self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];

ResultsInListViewController *resultsInListViewController = (ResultsInListViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"ResultsInListViewController"];

[self.window addSubview:resultsInListViewController.view];

[self.window makeKeyAndVisible];

подход Флавиу:

self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];

ResultsInListViewController *resultsInListViewController = (ResultsInListViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"ResultsInListViewController"];

[self.window setRootViewController:resultsInListViewController];

[self.window makeKeyAndVisible];
1 голос
/ 14 марта 2012

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

#import "LoginViewController.h"

LoginViewController *screen = [[LoginViewController alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:screen animated:YES];

//or

[self.window addSubView:screen];

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

Дайте мне знать, если вам понадобится дополнительная помощь.

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...