Представить диспетчер просмотра раскадровки из делегата приложения?

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

Но как я могу вызвать его из моего делегата приложения?

Я помещаю SignInViewController в свою основную раскадровку? Если да, то как мне получить доступ к моей раскадровке из моего делегата приложения? Или другой подход лучше?

Вы всегда можете ссылаться на делегата вашего приложения через синтаксис UIApplication. Оттуда вы всегда можете получить свой контроллер корневого представления. С вашим контроллером корневого представления вы можете получить ссылку на раскадровку.

После того, как у вас есть своя доска объявлений, вы делаете экземпляр экземпляра контроллера вида, который вы хотите. Представьте это.

 AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; MainViewController *mvc = (MainViewController *)appDelegate.window.rootViewController; LoginViewController *lvc = [mvc.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; [currentVC presentModalViewController:lvc animated:YES]; 

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

Чтобы показать контроллер просмотра из любого места (включая делегата приложения), я успешно использовал этот код в iOS 8+ (я не уверен в более ранней совместимости). Он будет представлен с модального представления, если он есть.

 YOURAppDelegate *appDelegate = (YOURAppDelegate *)[[UIApplication sharedApplication] delegate]; UINavigationController *rootNavC = (UINavigationController *)appDelegate.window.rootViewController; UIViewController *topVC = rootNavC.topViewController; UIViewController *myNewVC = [rootNavC.storyboard instantiateViewControllerWithIdentifier:<YOUR STORYBOARD ID>]; if (topVC.presentedViewController) { if ([topVC.presentedViewController class] == [UINavigationController class]) { dispatch_async(dispatch_get_main_queue(), ^{ [((UINavigationController*)topVC.presentedViewController) pushViewController:myNewVC animated:YES]; }); } else { dispatch_async(dispatch_get_main_queue(), ^{ [topVC.presentedViewController.navigationController pushViewController:myNewVC animated:animated]; }); } } else { dispatch_async(dispatch_get_main_queue(), ^{ [rootNavC pushViewController:myNewVC animated:animated]; }); } 

Обычно я обертываю это методом удобства и передаю мой экземплярный контроллер представления. Для OP – вы должны создать SignInViewController в раскадровке, назначить ему уникальный идентификатор раскадровки, а затем заменить этот идентификатор в приведенном выше коде.

  • Xcode - дубликат сцены раскадровки
  • UIAppearance Proxy взаимодействие с раскадровки
  • Выполнить код перед инициализацией контроллера First View (приложение на основе раскадровки)
  • Создайте автономный вид в раскадровке для использования программно
  • Как найти выбранное текстовое поле в iOS
  • Как установить выбранную вкладку в UITabBarController с помощью StoryBoard?
  • xcode раскадровка - исключение из архива ibtoold
  • Все UITableCells исчезают при нажатии на UITableView в iOS 7
  • Передача данных обратно с помощью функции rejectViewControllerAnimated
  • Пейзажный режим для Xcode с помощью раскадровки
  • Почему git добавляет и удаляет раздел Storyboard <classes> несколько раз?
  • Давайте будем гением компьютера.