1、关于导航控制器对象的初始化根控制器方法
FYNavigationController *nav = [[FYNavigationController alloc] initWithRootViewController:vc];
关于导航控制器对象的初始化根控制器方法,initWithRootViewController:是怎么实现的?默认是调用pushViewController:方法,即导航控制器对象nav调用
[nav pushViewController:vc];
这个方法
2、滑动返回手势
导航控制器是有代理的,当界面跳转时代理会调用上述方法,当然要先设置代理:self.delegate = self;千万别忘了这一步,要不然这个方法是不会执行的,那你的手势管理也就不会奏效。
下面是导航控制器的.m文件的实现:
#import "FYNavigationController.h"
@interface FYNavigationController ()<UINavigationControllerDelegate>
@property (nonatomic,strong) id popDelegate;//滑动返回手势的代理
@end
@implementation FYNavigationController
- (void)viewDidLoad {
[super viewDidLoad];
self.delegate = self;//别忘了设置代理!!
_popDelegate = self.interactivePopGestureRecognizer.delegate;//保存滑动返回手势识别器
}
//导航控制器控制子控制器跳转时会调用该方法
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
//当手机显示的界面为根控制器时
if (viewController == self.viewControllers[0]) {
//还原滑动返回手势代理
self.interactivePopGestureRecognizer.delegate = _popDelegate;
} else {
//当显示的不是根控制器时,清空滑动返回手势代理
//清空滑动返回手势的代理就能实现滑动返回
self.interactivePopGestureRecognizer.delegate = nil;
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end