本章内容给大家谈谈关于遇上ios11中如何使用两种方法替换method swizzling去掉导航栏返回按钮的文字等问题,我们该怎么处理呢。下面这篇文章将为你提供一个解决思路,希望能帮你解决到相关问题。
什么是Method Swizzling
在Objective-C中,方法拦截或者说Method Swizzling 实际上是在运行时通过改变方法选择器(Method Selector)和方法实现(Method Implementation)之间的对应关系来动态的修改一个类的行为。我们可以通过Method Swizzling处理一些系统库中非完美或者不能完全控制的方法和流程。这是一个强大的技术,但也需要我们谨慎使用。
使用Method Swizzling去掉导航栏返回按钮的文字的方法
在iOS中,默认的导航栏返回按钮会自动显示返回上一页的标题文字。但是我们可以通过Method Swizzling的技术将这个文字去掉,有两种方法可以实现:
方法一:自定义返回按钮
通过替换导航栏的返回按钮视图,来达到去掉返回按钮文字的效果。这个方法需要我们自定义一个UIBarButtonItem并添加到导航栏左侧。下面是实现代码:
- (void)viewDidLoad {
[super viewDidLoad];
UIImage *backButtonImage = [[UIImage imageNamed:@"backButton"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60) forBarMetrics:UIBarMetricsDefault];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}
上述代码实现了自定义导航栏返回按钮的功能,并去掉了返回文字。通过设置UIBarButtonItem的背景图片,我们可以设置自定义的返回按钮视图;通过调整偏移量,我们可以去掉按钮上原有的返回文字。最后,通过创建一个空标题的UIBarButtonItem,来实现去掉返回按钮文字的效果。
方法二:替换UIBarItem的setTitle:
使用Method Swizzling,通过替换系统UIBarItem的setTitle:方法,来达到去掉返回按钮文字的效果。下面是实现代码:
@implementation UIBarButtonItem (CustomizeBackButtonTitle)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *className = @"UIBarButtonItemButton";
Class cls = NSClassFromString(className);
SEL originalSelector = @selector(setTitle:);
SEL swizzledSelector = @selector(customize_setTitle:);
Method originalMethod = class_getInstanceMethod(cls, originalSelector);
Method swizzledMethod = class_getInstanceMethod(self, swizzledSelector);
method_exchangeImplementations(originalMethod, swizzledMethod);
});
}
- (void)customize_setTitle:(NSString *)title {
if ([self.title isEqualToString:@"返回"]) {
[self customize_setTitle:@""];
} else {
[self customize_setTitle:title];
}
}
@end
上述代码中,我们通过使用dispatch_once函数保证在运行时只调用一次。然后获取到UIBarButtonItemButton类,获取到查询方法的selector。通过method_exchangeImplementations函数,交换了自定义方法和原始方法的实现。最后,在自定义方法中,判断当前按钮的标题是否为默认返回文字“返回”,如果是则设置为空字符;如果不是,则调用原来的方法设置标题。
以上两种方法均可以实现去掉导航栏返回按钮文字的效果,但是方法一相对而言更加稳定和灵活。如果您需要在导航栏功能的基础上快速实现去掉文字需求,可以使用方法一,它有着更好的可控性。如果您对Method Swizzing有着深入的掌握,可以使用方法二更加灵活和精确地实现您的需求。总结
以上就是为你整理的ios11中如何使用两种方法替换method swizzling去掉导航栏返回按钮的文字全部内容,希望文章能够帮你解决相关问题,更多请关注本站相关栏目的其它相关文章!