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

使用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

学习是最好的投资!

모든 응답(1)
大家讲道理

= = 개인적으로는 이 방법을 추천하지 않습니다. 런타임은 자제해서 사용해야 합니다. 현지화에 사용하면 남용되는 것 같습니다.

사용하시려면 원래 방법을 기반으로 약간만 수정하고 최종적으로 원래 방법을 조정하는 것이 좋습니다. 전체 메소드의 의미를 변경하는 대신. 코드에서와 마찬가지로 줄은 속성을 잃고 일반 문자열이 됩니다. NSString *anotherString=[title string];

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿