将数据从 tabBarController 传递到嵌入在 navigationcontroller 中的 uiviewcontroller
Pass data from tabBarController to uiviewcontroller embedded in navigationcontroller
我有一个自定义标签栏控制器。每个选项卡都包含一个嵌入在导航控制器中的 viewcontroller。我从 appledelegate 的数据库中获取 pro_user 的值并将其设置在那里。然后在 CustomTabBarController 启动之前(在 appledelegate 中),我将其 "pro_user" 属性 设置为 true 或 false(这有效并且 CustomTabBarController 从 appledelegate 接收值)。
现在我试图将这个相同的值传递给 ViewController(ViewController1 和 ViewController2)。每个视图控制器也有一个 "pro_user" property.I 通过创建 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]
}
您似乎在设置全局设置。如果是这样,您可能需要考虑使用 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
该值也会在两次启动之间保存。
我有一个自定义标签栏控制器。每个选项卡都包含一个嵌入在导航控制器中的 viewcontroller。我从 appledelegate 的数据库中获取 pro_user 的值并将其设置在那里。然后在 CustomTabBarController 启动之前(在 appledelegate 中),我将其 "pro_user" 属性 设置为 true 或 false(这有效并且 CustomTabBarController 从 appledelegate 接收值)。
现在我试图将这个相同的值传递给 ViewController(ViewController1 和 ViewController2)。每个视图控制器也有一个 "pro_user" property.I 通过创建 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]
}
您似乎在设置全局设置。如果是这样,您可能需要考虑使用 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
该值也会在两次启动之间保存。