我正在尝试通过继承IBDesignable
来追溯本地化应用,以获得如此属性:
@property IBInspectable NSString *localizedKey;
然后我想我可以在UILabel
的生命周期中轻松覆盖正确的函数来执行此操作:
if (self.localizedKey) self.text = NSLocalizedString(self.localizedKey, nil);
以下是我尝试做的一个例子:
- (void) drawRect:(CGRect)rect {
NSLog(@"roundedlabel");
[super drawRect:rect];
[self.layer setCornerRadius:cornerRadius];
[self.layer setMasksToBounds:YES];
[self.layer setBorderWidth:borderWidth];
[self.layer setBorderColor:[borderColor CGColor]];
self.clipsToBounds = YES;
}
- (void) willMoveToSuperview:(UIView *)newSuperview {
[super willMoveToSuperview:newSuperview];
NSLog(@"roundedlabel");
if (self.localizedKey) self.text = NSLocalizedString(self.localizedKey, nil);
}
我还尝试将if (self.localizedKey)
移到drawRect
的各个位置。
我的计划是手动设置Localizable.strings
文件,并通过localizedKey
文件分配已知的XIB
文件。但是,我发现了两件事。
drawRect
和
willMoveToSuperview
,这些日志语句永远不会打印出来。 在运行时,当我看到涉及受影响的xib的视图时,我看不到本地化字符串的任何迹象,并且我在日志中的任何位置都看不到“roundedlabel
”。
发生了什么事?特别是:
(1)为什么我的子类IBDesignable UILabel子类根本不运行这些函数? (2)有办法做我想做的事吗?
答案 0 :(得分:0)
我在UILabel
上创建扩展,并使用storyboard / XIB中的运行时键值来设置本地化密钥。
extension UILabel {
func setHBLocalisationKey(key: String) {
self.text = ...
}
}
或
@implementation UILabel (HBLocalisation)
- (void)setHBLocalisationKey:(NSString *)key {
self.text = NSLocalizedString(key, nil);
}
@end
现在可以在任何标签上使用,无需自定义子类,并且它不会篡改Xcode UI,这似乎会导致您当前的方法出现一些问题。