【问题标题】: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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      相关资源
      最近更新 更多