在iOS开发中,对于定制返回按钮,相信很多人遇到过,其方法也是很多,这篇文章记录下我的解决办法。
去掉文字类型,只显示”>”
这个方法是网上找来的,使用runtime完成。实现方式特别巧妙,对在某个子VC中单独设置返回按钮不会影响。创建一个UINavigationItem的category,名为CustomBackButton,具体实现如下:
static char kCustomBackButtonKey;
@implementation UINavigationItem (CustomBackButton)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method originalMethodImp = class_getInstanceMethod(self, @selector(backBarButtonItem));
Method destMethodImp = class_getInstanceMethod(self, @selector(myCustomBackButton_backBarbuttonItem));
method_exchangeImplementations(originalMethodImp, destMethodImp);
});
}
- (UIBarButtonItem *)myCustomBackButton_backBarbuttonItem {
UIBarButtonItem *item = [self myCustomBackButton_backBarbuttonItem];
if (item) {
return item;
}
item = objc_getAssociatedObject(self, &kCustomBackButtonKey);
if (!item) {
item = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:nil action:nil];
item.tintColor = [UIColor blackColor];
}
return item;
}
如果只是显示“>”的话,使用runtime覆写backBarButtonItem方法就足够了。
加图片的返回按钮
但是很多情况下这样的返回按钮会显示的太粗,一般用一张图片来替代。需要注意的是,对图片的要求很高,不要过大,负责会显示错乱。实现代码是:
//设置返回样式图片
UIImage *image = [UIImage imageNamed:@"preview_back_black"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
navigationBar.backIndicatorImage = image;
navigationBar.backIndicatorTransitionMaskImage = image;
图片@3x的大小是90*90即可,具体就不给图片了。
文章来源:Hyyy's blog