JoJ*_*oJo 2 regex cocoa-touch objective-c
我在两个UILabel中显示用户注释- 一个用于用户名,另一个用于消息.两个标签都具有相同的X,Y坐标,但消息标签前面的空格等于用户名的宽度.这种技术可以帮助我轻松支持多行消息.
用户编写阿拉伯语消息时会出现问题.阿拉伯语是一种从左到右的语言.这意味着,我必须在阿拉伯字符串的末尾添加空格,而不是开头.正如您在下面的屏幕截图中看到的那样,我没有做出这种区分,并且阿拉伯语消息遇到了用户名.那么如何检测到UILabel 的文本属性(NSString)是用从右到左的语言编写的呢?

我尝试使用正则表达式,但以下函数始终为每个字符串返回false,包括阿拉伯语.
@implementation UILabel (position)
- (BOOL) containsArabic
{
NSError* error;
NSRegularExpression* regex = [NSRegularExpression
regularExpressionWithPattern:@"\p{Arabic}"
options:0
error:&error
];
return error == nil
&& [regex
numberOfMatchesInString:self.text
options:0
range:NSMakeRange(0, self.text.length)] > 0;
}
@end
Run Code Online (Sandbox Code Playgroud)
- (BOOL) containsArabic
{
NSString *isoLangCode = (NSString*)CFStringTokenizerCopyBestStringLanguage(
(CFStringRef)self.text,
CFRangeMake(
0,
self.text.length
)
);
NSLocaleLanguageDirection direction = [NSLocale lineDirectionForLanguage:isoLangCode];
NSLog(@"++++++");
NSLog(@"%@", self.text);
NSLog(@"%d", direction);
return direction == NSLocaleLanguageDirectionRightToLeft;
}
Run Code Online (Sandbox Code Playgroud)
输出无用:
2012-05-28 10:59:11.454 [2110:707] MANCHESTER CITY VS MANCHESTER UNITED LIVE HD
2012-05-28 10:59:11.461 [2110:707] 0
2012-05-28 10:59:11.474 [2110:707] ++++++
2012-05-28 10:59:11.477 [2110:707] tak
2012-05-28 10:59:11.484 [2110:707] 0
2012-05-28 10:59:11.511 [2110:707] ++++++
2012-05-28 10:59:11.513 [2110:707] ŸàŸÜŸáÿßÿ±ŸÉ ÿ?ÿ?ŸäÿØ
2012-05-28 10:59:11.520 [2110:707] 3
2012-05-28 10:59:11.704 [2110:707] ++++++
2012-05-28 10:59:11.712 [2110:707] ŸÜŸáÿßÿ±ŸÉ ÿ?ÿ?ŸäÿØ
2012-05-28 10:59:11.740 [2110:707] 3
2012-05-28 10:59:11.763 [2110:707] ++++++
2012-05-28 10:59:11.767 [2110:707] i think i am close
2012-05-28 10:59:11.772 [2110:707] 3
Run Code Online (Sandbox Code Playgroud)
这个答案假定你使用的是ARC:
NSString *stringToTest = @"Some Foreign Language";
NSString *isoLangCode = (__bridge_transfer NSString*)CFStringTokenizerCopyBestStringLanguage((__bridge CFStringRef)stringToTest, CFRangeMake(0, stringToTest.length));
NSLocaleLanguageDirection direction = [NSLocale characterDirectionForLangauge:isoLangCode];
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用NSLocale API的lineDirectionForLanguage:方法来确定语言行方向.
| 归档时间: |
|
| 查看次数: |
2451 次 |
| 最近记录: |