objective-c - iOS如何使用runtime对富文本进行国际化

 轩楼妈 发布于 2022-10-29 15:57

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

1 个回答
  • = = 个人是不建议这么做的。runtime 这个东西使用一定要有节制,感觉用来做本地化可以说得上是滥用了。

    如果要用的话,建议也只是在原方法的基础上稍作修改,最后还是调一下原方法。而不是把整个方法的含义都改了。像你的代码里, NSString *anotherString=[title string];这一行就失去了 attributes,变成普通 string 了。

    2022-10-31 00:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有