免费开源的iOS开发学习平台

UINavigationController介绍:11-代理方法

UINavigationController的代理方法可以监听控制器的入栈和出栈操作,同时UINavigationBar的代理方法可以监听navigationItem的入栈和出栈操作,这两种代理协议需要注意区分。

UINavigationControllerDelegate代理协议

UINavigationController的代理方法可以监听控制器的入栈和出栈操作,一般把目标控制器设置为UINavigationController的代理对象。常用的代理方法有:

  • 当源控制器执行Push或者Pop操作后,目标控制器即将显示时调用
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated; 
  • 当源控制器执行Push或者Pop操作后,目标控制器已经显示时调用
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

UINavigationBarDelegate代理协议

UINavigationBar的代理方法可以监听UINavigationBar添加NavigationItem的入栈和出栈操作,一般把导航控制器设置为UINavigationBar的代理对象。

  • 是否允许调用入栈push方法
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item; 
  • 入栈push动画播放完成后调用
- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item;
  • 是否允许调用出栈pop方法
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item; 
  • 出栈pop动画播放完成后调用
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item;