我试图在其中一个子视图控制器中调用UITabBarController
子类上的自定义方法。我已将CustomTabBarController
类实例化为AppDelegate.swift
中的根视图控制器,但是,我的子视图控制器上的.tabBarController
属性属于类UITabBarController
而不是{{1} }}。
为什么会这样?是否可以让我的视图控制器上的CustomTabBarController
属性反映我的子类而不是默认的.tabBarController
类?
这是我的子类:
UITabBarController
在我的视图控制器中,我想像这样访问这个类:
import UIKit
class CustomTabBarController: UITabBarController, UITabBarControllerDelegate, LoginControllerDelegate {
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
setupViews()
}
override func viewDidAppear(_ animated: Bool) {
checkLoginStatus()
}
func checkLoginStatus() {
if defaults.bool(forKey: "isLoggedIn") == false {
let loginController = LoginController()
loginController.delegate = self
present(loginController, animated: true, completion: nil)
}
}
func loginControllerDidDismiss() {
print("Delegation is working...")
}
func setupViews() {
let homeController = HomeController()
homeController.tabBarItem = CustomTabBarItem(title: "Home", imageNames: ["courthouse-icon-unselected", "courthouse-icon"])
let homeNavController = UINavigationController(rootViewController: homeController)
homeNavController.navigationBar.applyCustomStyle()
tabBar.tintColor = UIColor(red:0.18, green:0.34, blue:0.65, alpha:1.00)
self.setViewControllers([homeNavController], animated: true)
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
print(viewController.title)
return true
}
}
答案 0 :(得分:1)
最好的方法是测试它是否是您认为的并投射它以便编译器知道正确的类。
e.g:
if let custom = self.tabBarController as? CustomTabBarController {
custom.checkLoginStatus()
} else {
print("Unexpected controller \(self.tabBarController)")
}