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