// 数组中为需要登录的控制器
private static let viewControllerClassesThatRequireUserSession: [AnyObject.Type] = [FavoritesCollectionViewController.self, CartViewController.self, AccountViewController.self]
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
// 如果用户已经登录返回true
guard !AccountManager.defaultAccountManager.isUserLoggedIn else {
return true
}
let visibleController: UIViewController
// 判断将要跳转的控制器,是否需要登录
if let navigationController = viewController as? UINavigationController {
visibleController = navigationController.topViewController ?? viewController
} else {
visibleController = viewController
}
let shouldPresentSignInScreen = AppDelegate.viewControllerClassesThatRequireUserSession.contains { $0 == visibleController.dynamicType }
if shouldPresentSignInScreen {
SignInViewController.presentSignInViewController() { success in
if success {
// 登录成功,跳转到之前选择的控制器
self.tabBarController.selectedViewController = viewController
}
}
return false
}
return true
}
网友评论