Передача данных из tabBarController в uiviewcontroller, встроенный в навигационный контроллер - PullRequest
0 голосов
/ 13 октября 2018

У меня есть собственный контроллер панели вкладок.каждая вкладка содержит контроллер представления, встроенный в контроллер навигации.Я получаю значение для pro_user из базы данных в appledelegate и устанавливаю его там.затем перед запуском CustomTabBarController (в appledelegate) я устанавливаю для его свойства "pro_user" значение true или false (это работает, и CustomTabBarController получает значение от appledelegate).

Теперь я пытаюсь передать это же значение ViewControllers (ViewController1 и ViewController2).у каждого контроллера представления также есть свойство "pro_user". Я делаю это, создавая экземпляры viewcontroller и затем устанавливая их свойство pro_user перед внедрением каждого viewcontroller в навигационный контроллер.но ни один viewcontroller фактически не получает значение pro_user, которое я устанавливаю в CustomTabBarController.Надеюсь, это понятно.Как передать значение pro_user из CustomTabBarController в каждый из контроллеров представления?программно (я не использую раскадровки)

class AppDelegate: UIResponder, UIApplicationDelegate {

    var pro_user = true

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
        [UIApplicationLaunchOptionsKey: Any]?) -> Bool {


        window = UIWindow(frame:UIScreen.main.bounds)
        window?.makeKeyAndVisible()

        let customTabBarController = CustomTabBarController()
        customTabBarontroller.pro_user = pro_user
        self.window?.rootViewController = customTabBarController

        return true

    }

}




class CustomTabBarController:UITabBarController{

    var pro_user : Bool?

    override func viewDidLoad(){
        super.viewDidLoad()


        let viewController1 = ViewController1() 
        viewController1.pro_user = pro_user //doesn't work
        let firstNavigationController = UINavigationController(rootViewController: viewController1)

        let viewController2 = ViewController2() 
        viewController2.pro_user = pro_user //doesn't work
        let secondNavigationController = UINavigationController(rootViewController:viewController2)


        viewControllers=[firstNavigationController,secondNavigationController]

}

1 Ответ

0 голосов
/ 13 октября 2018

Похоже, вы устанавливаете глобальные настройки.Если это так, вы можете рассмотреть возможность использования UserDefaults .

Например, с хорошим расширением:

extension UserDefaults {
    var isProUser: Bool {
        get {
            return bool(forKey: "isProUser")
        }
        set {
            set(newValue, forKey: "isProUser")
        }
    }
}

Тогда в любом месте вашего приложения вы можете установить его:

UserDefaults.standard.isProUser = true

И получите:

let isProUser = UserDefaults.standard.isProUser

Значение также сохраняется между запусками.

...