此iOS应用中的某些标题在故事板中定义。一些标题正在以编程方式设置。是否有一种简单的方法(Obj-C类别可能?)使所有标题小写而不进行子类化?
答案 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
更低的所有标题。我想你正在试验类别。