2016-10-18 4 views
0

Я пытаюсь вызвать пользовательский метод в моем подклассе UITabBarController внутри одного из контроллеров дочерних элементов. Я создал экземпляр класса CustomTabBarController в качестве контроллера корневого представления в AppDelegate.swift, однако свойство .tabBarController на моих дочерних контроллерах представления относится к классу UITabBarController вместо CustomTabBarController.Методы подкласса UITabBarController недоступны на контроллерах дочерних элементов?

Почему это происходит? Возможно ли, что свойство .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 
    } 

} 

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

import UIKit 

class HomeController: ListController { 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    self.title = "Home" 
    self.tabBarController??? // Right now this is a UITabBarController, but I would like to it be a CustomTabBarController 
    } 

} 

ответ

1

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

.: например

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

Не могу поверить, что я не пытался его отливки в качестве правильного класса. Это имеет большой смысл, и для моего использования он отлично работает! Благодаря! – SpacemanDeMars

Смежные вопросы