使用runtime对程序进行国际化之后发现之前的富文本没有更改,后来单独对富文本重写方法,但是进行国际化之后原本的富文本字符串就变回了普通的字符串,下面是我偷换方法的代码
SEL selA1 = @selector(changeTitle:);
Method methodA1 = class_getInstanceMethod(self, selA1);
Method methodB1 = class_getInstanceMethod(self, @selector(setAttributedText:));
method_exchangeImplementations(methodA1, methodB1);
- (void)changeTitle:(NSAttributedString *)title{
NSString *anotherString=[title string];
NSString *str = NSLocalizedStringFromTable(anotherString, @"File", nil);
NSMutableAttributedString *attributedString=[[NSMutableAttributedString alloc] initWithString:str attributes:nil];
// [attributedString setAttributes:@{NSForegroundColorAttributeName:[NSColor redColor]} range:NSMakeRange(0, 5)];
[self changeTitle:attributedString];
}
当前类是UILabel类,我偷换的是setAttributedText:方法.还有一个问题就是即时我对富文本本地化成功了,但是富文本的格式也会变化,range会改变,请问如何解决此问题
= = 個人的には、これを行うことはお勧めしません。ランタイムをローカライズに使用する場合は、抑制して使用する必要があると感じます。
使用する場合は、元のメソッドに基づいて少し変更するだけし、最終的に元のメソッドを調整することをお勧めします。メソッド全体の意味を変えるのではなく。コードと同様に、行 は属性を失い、通常の文字列になります。
NSString *anotherString=[title string];