iOS 滑动返回功能

1. 如何设置自定义的返回按钮图片?

通过设置 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 的图片:

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

2.设置backBarButtonItem

假若想实现BViewController的backBarButtonItem,就要在AViewController的ViewDidLoad中设置backBarButtonItem.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:"返回"  style:UIBarButtonItemStylePlain  target:self  action:nil];
self.navigationItem.backBarButtonItem = backButton;

这样才可以在B中设置backBarButtonItem.此时,才会在B中有效果出现,显示返回字样。否则,则无设置效果。

3. 使用 UIButton 自定义返回按钮后,如何使用系统的滑动返回?

当我们的返回按钮上需要显示不同的文字时,就不能使用 backIndicatorImage 了,我们要自定义一个 UIButton 来生成 UIBarButtonItem,再设置 navigationBar 的 leftBarButtonItem。而如果设置了 leftBarButtonItem 的话,会使系统的滑动返回失效。我们需要在 UIViewController 中加入这行代码:

self.navigationController.interactivePopGestureRecognizer.delegate = self;

这样设置leftBarButtonItem会有滑动返回手势问题,需要加入一些限制代码:

#pragma mark - UIGestureRecognizerDelegate

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if ([self isRootViewController]) {
        return NO;
    } else {
        return YES;
    }
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
}

参考自:
gitHub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值