使UINavigationBar标题的所有实例都小写而不进行子类化?

时间:2013-07-12 22:56:18

标签: ios uinavigationbar

此iOS应用中的某些标题在故事板中定义。一些标题正在以编程方式设置。是否有一种简单的方法(Obj-C类别可能?)使所有标题小写而不进行子类化?

1 个答案:

答案 0 :(得分:2)

使用method_exchangeImplementations(AKA“Method Swizzling”)可以使用一点客观魔法

#import <objc/runtime.h>

@interface UINavigationItem (New)
@end

@implementation UINavigationItem (New)

- (void)setTitleLower:(NSString *)title {
    [self setTitleLower:[title lowercaseString]];
}

+ (void)load {
    method_exchangeImplementations(class_getInstanceMethod(self, @selector(setTitle:)), class_getInstanceMethod(self, @selector(setTitleLower:)));
}

@end

现在,对someNavItem.title = @"Whatever"[UINavigationItem setTitle:(NSString*)title])的每次调用都应该通过setTitleLower,而setTitleLower又会调整原始setTitle并进行小修改,从而降低标题。

我会避免必须实现这样一个类别,只是为了为每个UINavigationItem更低的所有标题。我想你正在试验类别。