20

数字で始まるヘブライ文字列を表示しようとすると、常に文字列の最後に次のように数字が表示されます。

しかし、テキストの右側に数字を表示する必要があります-

それに対する解決策はありますか?

UILabel & UITextField & UITextView で発生します

左側に数字を書き込もうとしても同じ結果になります。

UITextAlignment の組み合わせで遊んでも役に立ちません。

4

5 に答える 5

22

UILabel の設定を変更する必要はありません。文字列の前に unicode 0x200F の文字を配置するだけです。これがまさにその理由だ:

Unicode では、多くの文字に特定の方向性があり、これにより、システムはそれを書く必要があることを知ることができます。段落は通常、最初の文字の方向を使用します。そのため、数字のない文字列は右から左に自動的に入力されます。

現在、数字のような一部の文字は「弱い」方向性を持っているため、基本的に周囲の方向性を採用しています。「1. בבוקר」と入力すると、システムは最初に 1 を認識するため、通常の LTR 方向に進みます。配置を変更しても、テキスト全体が右または中央に移動するだけなので、役に立ちません。

この問題を解決するために、Unicode には 2 つのマーカー文字 (LTR: 0x200E、RTL:200F) があります。これらは目に見えませんが、方向性を決定します。では、「1. בבוקר」は…

  1. あいうえお

"#x200F" + "1. בבוקר" と入力すると、次のように表示されます。

1. あいうえお

于 2010-05-28T23:40:30.900 に答える
16

Moの素晴らしい答えに基づいて:

これはコードObj-Cです:

NSString *RTFstr = "1. בבוקר"; //This could be any right-to-left string
NSString *directionalString = [@"\u200F" stringByAppendingString:[note text]];
[someUITextView setString:directionalString];

そしてそれは実際に機能します...

于 2010-11-30T00:00:09.263 に答える
8

少し異なる問題がありましたが、Moの答えが手がかりを与えてくれました。

文字列の反転を自分で行うことなく"abcd"、RTL 方向 ( ) に表示されるLTR テキスト ( など) を取得したかったのです。"dcba"間に文字列を囲んでトリックを行います\u202E\u202C

また、次のページを読むことをお勧めします。これらすべての Unicode マジックについて非常によく説明されています。

http://www.iamcal.com/understanding-bidirectional-text/

于 2012-01-30T20:29:10.487 に答える
0

これを行うためのより洗練された方法があるかどうかはわかりませんが、次のようなことを試してみてください:

NSString *test = @"12. just a teststring";
NSString *number = [test substringToIndex: [test rangeOfString: @" "].location];
NSString *text = [test substringFromIndex: [test rangeOfString: @" "].location];
test = [NSString stringWithFormat: @"%@ %@", text, number];
// test == "just a teststring 12."
于 2010-02-08T08:37:23.223 に答える