iOS 7中在传统的左上角返回键之外,提供了右滑返回上一级界面的手势。
也就是说,我可以不仅仅通过back返回键,回到push前页面.还可以通过向右滑的手势来完成这样的操作.
UINavigationController中新增的属性:
@property(nullable, nonatomic, weak) id<UINavigationControllerDelegate> delegate;
@property(nullable, nonatomic, readonly) UIGestureRecognizer *interactivePopGestureRecognizer
interactivePopGestureRecognizer,即右滑返回只支持以UINavigationController为容器的ViewController间切换,要想在自定义容器中使用,需要一些额外的工作。
围绕在手势方面有一下几个问题:
1>如何禁止某个返回页面的滑动手势触发
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:YES];
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:YES];
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
注意:self.navigationController.interactivePopGestureRecognizer.enabled = NO;这句一定要放在viewDidAppear而不是viewWillAppear里。
2>如何让滑动手势触发失效
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
3> 如何设置自定义的返回按钮图片?
如果我们的返回按钮不需要显示文字,或者显示的文字是固定的,可以做到图片中去,那么我推荐通过设置 iOS 7 新引入的 backIndicatorImage 来自定义返回按钮。代码如下:
UIImage *image = [UIImage imageNamed:@"nav_back_btn"];
[UINavigationBar appearance].backIndicatorImage = image;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = image;
这样设置后会发现图片被渲染成 navigationBar 的 tintColor 的颜色了,要怎样才能显示出原始的图片颜色呢?还需要用到 iOS 7 中 UIImage 的一个新属性 renderingMode。 我们需要生成一张 renderingMode 为 UIImageRenderingModeAlwaysOriginal 的图片,让我们加上这行代码:
UIImage *image = [UIImage imageNamed:@"nav_back_btn"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[UINavigationBar appearance].backIndicatorImage = image;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = image;
这样我们的图片就能显示出原始的颜色了。
4>自定义导航栏后侧滑返回功能失效
没有发现更好的解释,但可以参考 http://www.jianshu.com/p/349636eb3fca