Представление Контроллера Представления Регистрации Перед UITabBarController
Я хочу предоставить контроллер представления входа в систему, чтобы мои пользователи могли проходить проверку подлинности до того, как будут представлены контроллеры панели вкладок. В приведенном ниже коде я получаю сообщение об ошибке "Не удалось преобразовать значение типа" LogInViewController "в" UITabBarController ". Перечислена документация Apple:
При развертывании интерфейса панели вкладок вы должны установить это представление как корневой каталог вашего окна. В отличие от других контроллеров представления, интерфейс панели вкладок никогда не должен устанавливаться как дочерний элемент другого контроллера представления.
Я в тупике, и моя реализация усложняется, когда я распространяю данные ядра по 5 контроллерам представления (например, controller1.coreDataStack = coreDataStack, объявленный как свойство в классе AppDelegate), который является частью контроллера панели вкладок. Могу ли я получить некоторую помощь о том, как я должен перевести пользователя с экрана входа в систему на один из контроллеров представления с вкладками? Любой вклад будет оценен.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Login View Controller
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginVC = storyboard.instantiateViewController(withIdentifier: "loginVC") as! LogInViewController
self.window?.rootViewController = loginVC
// TabBar Controller
let tabController = window!.rootViewController as! UITabBarController
if let tabViewControllers = tabController.viewControllers {
// First tab (only one so far...)
let navController = tabViewControllers[0] as! UINavigationController
let controller1 = navController.viewControllers.first as! FirstViewController
controller1.coreDataStack = coreDataStack
}
}
2 ответа
Вы получили ошибку, потому что пытаетесь принудительно развернуть LogInViewController
в UITabBarController
,
Для вашего потока проектирования сохраните loginStatus пользователя в базе данных, проверьте условие перед установкой window.rootViewController
, если пользователь logged-in
тогда покажи tabController
иначе покажи LogInViewController
,
let userLogined = GET LOGIN STATUS FROM DATABSE
if userLogined{
// Initiate Tabbar Controller object
let tabController = INITIATE_TABBAR_CONTROLLER
let tabViewControllers = tabController.viewControllers
// First tab (only one so far...)
let navController = tabViewControllers[0] as! UINavigationController
let controller1 = navController.viewControllers.first as! FirstViewController
controller1.coreDataStack = coreDataStack
self.window?.rootViewController = tabController
}else{
// Login View Controller
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginVC = storyboard.instantiateViewController(withIdentifier: "loginVC") as! LogInViewController
self.window?.rootViewController = loginVC
}
Как альтернативный метод, как насчет того, чтобы всегда устанавливать rootViewController в контроллер панели вкладок. Затем, если пользователь вышел из системы, модально представьте контроллер представления входа в систему из контроллера панели вкладок. Как только пользователь успешно вошел в систему, отклоните контроллер представления входа в систему. Я использовал этот метод много раз во многих приложениях.