UINavigationController滑動返回,有需要的朋友可以參考下。
最近做了UINavigationController的滑動返回(IOS7及以后系統默認支持的), 主要分成以下幾步以及碰到的問題, 我這里做個總結:
*.首先說明個普遍碰到的問題
網上普遍看到說, 在UINavigationController下自定義leftBarButtonItem會導致滑動失效, 解決方案:http://blog.csdn.net/meegomeego/article/details/25879605
但我想告訴大家, 我也是自定義了leftBarButtonItem卻沒有碰到上述問題, 我是統一寫了一個BaseViewController作為所有controller父類, 除了rootConrtoller, 這里不知為何, 有知道的可以留言.
排除上述原因, 下面介紹下怎么實現滑動:
- (void)viewDidLoad
{
[super viewDidLoad];
/* UINavigationControllerDelegate */
self.delegate = self;
/ swipe gesture /
__weak typeof (self)weakSelf = self;
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
// self.interactivePopGestureRecognizer.enabled = YES;
/* UIGestureRecognizerDelegate */
self.interactivePopGestureRecognizer.delegate = weakSelf;
}
}
這里是將interactivePopGestureRecognizer.delegate賦給self. 這樣便可以實現滑動, 因為enabled默認是YES.
2. 在滑動過程中你會發現如果在pushViewController的動畫過程中激活滑動手勢會導致crash, 解決方案:
/ set gesture no when pushViewController /
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.enabled = NO;
}
[super pushViewController:viewController animated:animated];
}
在push的時候關閉手勢, 這樣就不用擔心會激活滑動
/ set gesture yes when showViewController /
- (void)navigationController:(UINavigationController )navigationController didShowViewController:(UIViewController )viewController animated:(BOOL)animated
{
if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
/ set gesture yes when showViewController /
- (void)navigationController:(UINavigationController )navigationController didShowViewController:(UIViewController )viewController animated:(BOOL)animated
{
if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
navigationController.interactivePopGestureRecognizer.enabled = YES;
}
/ if rootViewController, set delegate nil /
if (navigationController.viewControllers.count == 1) {
navigationController.interactivePopGestureRecognizer.enabled = NO;
navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
在判斷當前為rootController, 設置手勢無效, 而且必須設置delegate為nil, 這樣的話就可以解決卡死的問題了.
這樣的話, 就可以完成navigationcontroller下的返回滑動了, 和微信一樣一樣滴~~~~~
