objective-c - iOS如何使用runtime对富文本进行国际化
PHPz
PHPz 2017-04-18 09:05:24
0
1
312

使用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会改变,请问如何解决此问题

PHPz
PHPz

学习是最好的投资!

répondre à tous(1)
大家讲道理

= = Personnellement, je ne recommande pas de faire cela. Le runtime doit être utilisé avec retenue. Je pense qu'il est abusé lorsqu'il est utilisé pour la localisation.

Si vous souhaitez l'utiliser, il est recommandé de simplement apporter de légères modifications en fonction de la méthode d'origine, et enfin d'ajuster la méthode d'origine. Plutôt que de changer le sens de toute la méthode. Comme dans votre code, la ligne perd ses attributs et devient une chaîne normale. NSString *anotherString=[title string];

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal