Динамический первый контроллер просмотра в iOS

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

В типичном приложении для входа в систему (например, facebook) у вас есть первый контроллер представления, это логин. После того, как вы войдете в систему, другое представление будет первым при следующем входе в приложение.

Я не вижу одного места (в main.m?) Или делегата приложения, где вы можете выбрать первое представление и применить некоторую логику для его выбора. То, что я видел, – это то, как в любом случае используется первый вид, и в этом представлении выполняется некоторая логика, нужно ли вызывать окно входа в систему. Это единственная практика, чтобы это сделать? Я не хочу, чтобы мой основной вид мигал на мгновение, прежде чем он откроет окно входа в систему, если пользователю нужно войти в систему. Не могу ли я просто перейти непосредственно к окну входа в систему, если это необходимо, или к представлению «вошел в систему», если пользователь уже вошел в систему?

В делегате приложения у вас есть окно var, которое должно быть основным окном приложения:

self.window.rootViewController = anyViewController; [self.window makeKeyAndVisible]; 

Вам нужно будет решить, что такое экземпляр anyViewController . Обычно вы избегаете «мигать», представляя изображение всплеска, оно отображается до тех пор, пока окно ключа не станет видимым с его контроллером корневого представления. Теперь вы можете сделать что-то вроде:

main.m

 int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class])); } } 

MyAppDelegate.m

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. UserInfo * appUserInfo = [[DataManager sharedManager] applicationUserInfo]; UIViewController *anyViewController = [[ControllersManager sharedManager] launchViewControllerForUser:userInfo]; self.window.rootViewController = anyViewController; [self.window makeKeyAndVisible]; return YES; } 

Где ControllersManager – менеджер диспетчера singleton, который вы хотите использовать для всех операций навигации. Метод launchViewControllerForUser: может быть следующим:

 -(UIViewController*) launchViewControllerForUser:(UserInfo*) aUserInfo { if (aUserInfo) { return [[MainMenuViewController new] autorelease]; } else { return [[LoginViewController new] autorelease]; } } 

DataManager – это одноэлементный класс, который вы будете использовать для всех операций с данными, таких как чтение ранее сохраненного пользователя приложения, завернутого в объект UserInfo .


Иногда у вас есть файл nib для главного окна, если вы хотите использовать такой метод, вам нужно настроить линию

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

с той же моделью:

  self.window = [[WindowManager sharedManager] keyLaunchApplicationWindow]; 

И внутри этого метода вы также можете назначить корневой навигационный контроллер. Таким образом, вы можете объединить эти два подхода.

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

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

 - (void)appDidFinishLaunchingWithOptions:(NSDictionary *)options { //window setup UIViewController *normalRootViewController = [[UIViewController alloc] init]; self.window.rootViewController = normalRootViewController; [self.window makeKeyAndVisible]; if (shouldDisplayLoginViewController) { UIViewController *loginViewController = [[UIViewController alloc] init]; [self.window.rootViewController presentModalViewController:loginViewController animated:NO]; } } 

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

  • Ошибка таймаута Cocoapods
  • в /usr/lib/system/libcache.dylib, отсутствует требуемая архитектура armv6
  • Как воспроизводить видео, хранящиеся в видеотеке
  • Разница между сетями AdMob и DFP?
  • Есть ли способ доступа к устройствам Bluetooth Low Low Energy в iOS?
  • Каков наилучший / простой способ создания макета типа «раскладка» в iOS
  • Интерактивный переход, такой как Google Maps (iOS)
  • Приложение Facebook предлагает iOS v4 SDK error
  • Ошибка Paypal MPL iOS
  • Измерение кампании Google Analytics не работает
  • iOS: Как определить некоторые объекты по умолчанию, которые будут использоваться где угодно?
  • Давайте будем гением компьютера.