使用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会改变,请问如何解决此问题
= = Secara peribadi, saya tidak mengesyorkan melakukan ini. Runtime mesti digunakan dengan kekangan Saya rasa ia disalahgunakan apabila digunakan untuk penyetempatan.
Jika anda ingin menggunakannya, disyorkan untuk hanya membuat sedikit pengubahsuaian berdasarkan kaedah asal, dan akhirnya menyesuaikan kaedah asal. Daripada mengubah maksud keseluruhan kaedah. Seperti dalam kod anda, baris kehilangan atribut dan menjadi rentetan biasa.
NSString *anotherString=[title string];