【发布时间】:2018-07-16 12:30:18
【问题描述】:
我在一个 iOS 应用程序上工作,该应用程序实现了一个连接了 5 个图标的 UITabBarController。整个项目是通过 Storyboard 制作的。因为我想为用户提供 4 个主题的选项,我在静态 tableView 中做的事情,我遇到了一个问题。
当用户更改主题时,先前通过 tabBar 视图控制器实例化的视图控制器不会更新到主题更改,因为它们在主题更新之前存在。我可以以某种方式解除它们并在 UITabBar 委托的 didSelect 方法上创建相同视图控制器类的新实例吗?
我是否正确地处理了这个问题?任何帮助将不胜感激!
提前感谢您的帮助。
类 MainTabController: UITabBarController {
override func viewDidLoad()
{
super.viewDidLoad()
}
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem)
{
let theme = UserDefaults.standard.string(forKey: "selectedColor")
print(theme!)
for vc in self.viewControllers!
{
if (theme == "default")
{
vc.view.backgroundColor = UIColor(red: 0xF9 , green: 0xF7 , blue: 0xF7)
}else if (theme == "theme1")
{
vc.view.backgroundColor = UIColor(red: 0x1F , green: 0xFF, blue: 0xFF)
}else if (theme == "theme2")
{
vc.view.backgroundColor = UIColor(red: 0xE3 , green: 0xFD, blue: 0xFD)
}else if (theme == "theme3")
{
vc.view.backgroundColor = UIColor(red: 0x3E, green: 0xC1, blue: 0xD3)
}
}
}
}
在每个视图控制器中的实现示例:
override func viewDidLoad()
{
let theme = UserDefaults.standard.string(forKey: "selectedColor")
print(theme!)
if (theme == "default")
{
outerView.backgroundColor = UIColor(red: 0xF9 , green: 0xF7 , blue: 0xF7)
}else if (theme == "theme1")
{
outerView.backgroundColor = UIColor(red: 0x1F , green: 0xFF, blue: 0xFF)
}else if (theme == "theme2")
{
outerView.backgroundColor = UIColor(red: 0xE3 , green: 0xFD, blue: 0xFD)
}else if (theme == "theme3")
{
outerView.backgroundColor = UIColor(red: 0x3E, green: 0xC1, blue: 0xD3)
}
}
【问题讨论】:
-
显示一些知道你在代码中做什么的代码
-
如果您可以存储更改并使其反映在
viewDidAppear方法块中,请使用单吨类 -
你是如何让你的主题在视图控制器中生效的。解决方案可能取决于它。请出示您的代码。
标签: ios iphone swift xcode swift4