将数据从tabBarController传递到导航控件中嵌入的uiviewcontroller

时间:2018-10-12 21:27:38

标签: swift properties viewcontroller programmatically tabbarcontroller

我有一个自定义的标签栏控制器。每个选项卡都包含一个嵌入在导航控制器中的ViewController。我从appledelegate的数据库中获得了pro_user的值并将其设置在那里。然后在启动CustomTabBarController(在appledelegate中)之前,我将其“ pro_user”属性设置为true或false(此方法有效,并且CustomTabBarController从appledelegate接收值)。

现在,我正在尝试将此相同的值传递给ViewController(ViewController1和ViewController2)。每个视图控制器还具有“ pro_user”属性。我通过创建viewcontroller实例,然后在将每个viewcontroller嵌入导航控制器之前设置其pro_user属性来实现。但是两个viewcontroller都没有实际收到我在CustomTabBarController中设置的pro_user的值。我希望这很清楚。如何将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 :(得分:1)

您似乎正在设置全局设置。如果是这样,您可能要考虑使用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

该值也会在两次启动之间保存。