如何在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并重写viewDidAppearviewDidDisappear方法来调用委托。

 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并让其他任何感兴趣的对象订阅这些对象。 这样你完全分离菜单和其他类。

  1. 你的MenuViewController类可以有一个函数来改变button上的图像。 例如, func changeButtonMenuImage()
  2. 你的'UISideMenuNavigationController'( 或它的一个子类 )可以作为一个属性,实例variables或IBOutlet与MenuViewController进行某种连接。 例如, @IBOutlet var menuController: MenuViewController
  3. 然后你的viewDidAppearviewDidDisappear可以调用它的函数。 例如, menuController.changeButtonMenuImage()