如何在ViewDidAppear和ViewDidDisappear从其他类中插入代码
每当UISideMenuNavigationController出现或消失,我都想更改button图像。
这是有一个button的类。
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使用框架菜单
每当副菜单出现或消失时,我都需要更改button图像。 我无法从ReadMe Side Menufind方法。 这就是为什么我认为需要从侧面菜单类的ViewDidAppear和ViewDidDisappear方法插入代码,但不想破坏类。
您只需要子类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) } }
然后你看到控制器的button实现协议,并将自己设置为委托。
你也可以让你的菜单子类发送NSNotification
并让其他任何感兴趣的对象订阅这些对象。 这样你完全分离菜单和其他类。
- 你的
MenuViewController
类可以有一个函数来改变button上的图像。 例如,func changeButtonMenuImage()
。 - 你的'UISideMenuNavigationController'( 或它的一个子类 )可以作为一个属性,实例variables或IBOutlet与MenuViewController进行某种连接。 例如,
@IBOutlet var menuController: MenuViewController
- 然后你的
viewDidAppear
和viewDidDisappear
可以调用它的函数。 例如,menuController.changeButtonMenuImage()