【问题标题】:UIViewController & UIView: respond to screen changes from outside the object?UIViewController & UIView:从对象外部响应屏幕变化?
【发布时间】:2019-11-01 14:15:21
【问题描述】:
我想要做什么
我正在尝试检测:
- 当新的
UIViewController 进入屏幕时
- 当
UIViewController 离开屏幕时
- 当
UIView 被添加到屏幕时
- 当
UIView 离开屏幕时
关键点:我正在尝试从外部检测所有这些变化。
含义:我不想对类内部现有函数的这些变化做出响应,我希望能够从外部类中观察它们并做出相应的反应。
奖励积分:如果我们不需要事先知道任何UIViews 或UIViewControllers 的任何信息,并且我们不必在视图中添加任何代码他们自己,那将是惊人的。
我最初的想法是这些涉及到 KVO 和监听 UIViewController 的视图的窗口属性和类似的东西。
【问题讨论】:
标签:
ios
swift
xcode
uiview
uiviewcontroller
【解决方案1】:
您可以创建一个继承自 UIViewController 并覆盖 viewDidAppear(_:) 和 viewDidDisappear(_:) 方法的 BaseViewController 类。在其中的每一个中,您都可以发布通知。
然后让你关心的所有 UIViewControllers 都继承自BaseViewController。
您仍然需要向所有 ViewControllers 添加代码,但这只是从单个类的继承。
class BaseViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// viewDidAppear notification
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// viewDidDisappear notification
}
}
BaseView 类的想法相同。
class BaseView: UIView {
override func addSubview(_ view: UIView) {
super.addSubview(view)
// notification
}
override func willRemoveSubview(_ subview: UIView) {
super.willRemoveSubview(subview)
// notification
}
}