子视图控制器上没有UITabBarController子类方法?

时间:2016-10-18 18:10:52

标签: ios swift uiviewcontroller uitabbarcontroller

我试图在其中一个子视图控制器中调用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
  }

}

1 个答案:

答案 0 :(得分:1)

最好的方法是测试它是否是您认为的并投射它以便编译器知道正确的类。

e.g:

    if let custom = self.tabBarController as? CustomTabBarController {
        custom.checkLoginStatus()
    } else {
        print("Unexpected controller \(self.tabBarController)")
    }