我想在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 Side Menu找到方法。这就是为什么我认为需要在Side Menu Class中的ViewDidAppear和ViewDidDisappear方法中插入代码但不想破坏类。
答案 0 :(得分:4)
您只需要子类UISideMenuNavigationController
并覆盖viewDidAppear
& viewDidDisappear
方法来调用委托。
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)
}
}
然后让您使用按钮实现协议查看控制器并将其自身设置为委托。
您还可以让您的菜单子类发送NSNotification
,并让任何其他感兴趣的对象订阅这些对象。这样就可以完全解耦菜单和其他类。
答案 1 :(得分:1)
MenuViewController
课程可以使用更改按钮上图像的功能。例如,func changeButtonMenuImage()
。@IBOutlet var menuController: MenuViewController
viewDidAppear
和viewDidDisappear
可以调用它的功能。例如,menuController.changeButtonMenuImage()