ios - 如何在其他类的 ViewDidAppear 和 ViewDidDisappear 中插入代码

标签 ios swift

每当 UISideMenuNavigationController 出现或消失时,我想更改按钮图像。

这是一个有按钮的类。

class MenuViewController: UIViewController {

  @IBOutlet var btnMenu: UIButton!

  override func viewDidLoad() { 
    super.viewDidLoad()
  }
}

这是我要插入代码的另一个类。

open class UISideMenuNavigationController: UINavigationController {

      override open func viewDidAppear(_ animated: Bool) {
         super.viewDidAppear(animated)

         // insert some code here but from MenuViewController class
      }

      override open func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)

        // insert some code here but from MenuViewController class
      }
}

我不想更改 UISideMenuNavigationController 类,因为它是来自 pod 的框架。

我正在使用来自 https://github.com/jonkykong/SideMenu 的框架侧边菜单

每当侧边菜单出现或消失时,我都需要更改按钮图像。我无法从 ReadMe 侧边菜单中找到方法。这就是为什么我认为需要在侧边菜单类的 ViewDidAppear 和 ViewDidDisappear 方法中插入代码,但又不想破坏该类。

最佳答案

您只需继承 UISideMenuNavigationController 并覆盖 viewDidAppearviewDidDisappear 方法来调用委托(delegate)。

protocol MyUISideMenuDelegate {
    func menuDidAppear(_ menu:MyUISideMenuNavigationController) -> Void
    func menuDidDisappear(_ menu:MyUISideMenuNavigationController) -> Void
}

open class MyUISideMenuNavigationController: UISideMenuNavigationController {

    var menuDelegate: MyUISideMenuDelegate? 

    override open func viewDidAppear(_ animated: Bool) {
         super.viewDidAppear(animated)
         self.menuDelegate?.menuDidAppear(self)
    }

    override open func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        self.menuDelegate?.menuDidDisappear(self)
    }
}

然后让您使用按钮查看 Controller 实现协议(protocol)并将其自身设置为委托(delegate)。

您还可以让您的菜单子(monad)类发送 NSNotification 并让任何其他感兴趣的对象订阅这些对象。这样您就可以完全解耦菜单和其他类。

关于ios - 如何在其他类的 ViewDidAppear 和 ViewDidDisappear 中插入代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40878935/

相关文章:

ios - 以编程方式添加 CenterX/CenterY 约束

ios - 将 FastPdfKit 与 PhoneGap 应用程序集成

ios - 我可以从 URL 加载 UIImage 吗?

ios - NSMutableString replaceOccurrencesOfString 替换整个单词

ios - 我如何检查快照是否包含 Firebase 中的特定值?

ios - 如何在没有 xcode 的情况下生成 xml 格式的权利?

ios - 如何使用图表在 X 轴上显示每月(IOS)

swift - Swift 中的函数式编程

ios - 支持 iOS 12 和 13 时的 AppDelegate 和 SceneDelegate

ios - @IBInspectable 在自定义按钮类中返回 nil