每当 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
并覆盖 viewDidAppear
和 viewDidDisappear
方法来调用委托(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/