ios - ViewWillAppear 未在标签栏项目视图控制器中调用
问题描述
我有结构:
*- TabBarViewController (根)
*-- 导航视图控制器
*---- ChatViewController
*-- 导航视图控制器
*---- 菜单视图控制器
当我切换标签栏项目时,(Chat, Menu) 中的 viewWillAppear 只调用一次,但在 NavigationVC 中每次我切换时都会调用。
切换项目时是否可以在 Chat 和 Menu ViewControllers 中自动调用 viewWillAppeare?
super.viewWillAppear 是内部方法。
我的代码看起来像:
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let v1 = storyboard!.instantiateViewController(withIdentifier: "ChatViewController")
let v2 = storyboard!.instantiateViewController(withIdentifier: "MenuViewController")
viewControllers = [v1,v2]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
class ChatViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print(self,#function)
}
}
class MenuViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print(self,#function)
}
}
它适用于明确的新项目,但适用于旧项目(我工作的地方,我有很多功能,不起作用)
StoryboardId 链接到 NavigationViewController 中Storyboard
解决方案
我发现问题:在extension UINavigationController
我有方法
open override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if !UserDefaults.standard.isUserPresented {
navigationBar.barTintColor = .rgbColor(red: 43, green: 43, blue: 43, alpha: 1)
} else {
navigationBar.barTintColor = .rgbColor(red: 100, green: 100, blue: 100, alpha: 1)
}
}
并且此块 viewWillAppear 在 NavigationBar 的子视图控制器中
推荐阅读
- angularjs - 如何处理 Angular 1.5 组件中的 img onerror 事件
- c++ - Qt - QUdpSocket 绑定不断失败
- json - 如何使用节点 js 将 csv 文件转换为 json 文件?
- python - “utf-8”编解码器无法解码位置 11 中的字节 0x95:无效的起始字节
- python - 将一维数组 a[k] 和 d[j] 乘以矩阵 m[j,k]
- spring - RestTemplate 是否有类似于 DefaultResponseErrorHandler 的功能?
- android - 动态列表未显示线性布局中的所有元素
- c++ - 如何通过其父窗口获取控件的文本值
- php - 简码代码包装内容代码
- python - 在 Groupme Bot 中通过 JSON 消息请求传递变量来调用函数