2010-02-02 13 views
17

Der Versuch, eine hebräisch Zeichenfolge anzuzeigen, die mit einer Zahl beginnt, zeigt immer die Nummer am Ende der Zeichenfolge wie folgt: 1. יום שישי בבוקרRTL zeigt Zahlen am Ende der Zeilen

aber ich brauche die Nummer auf der rechten Seite des Textes angezeigt werden -

irgendeine Lösung für das?

kommt es vor, mit UILabel & UITextField & UITextView

und versucht, die Zahl auf der linken Seite auch die gleiche resault produzieren zu schreiben.

Spielen mit Kombinationen von UITextAlignment wird nicht helfen.

+0

Siehe http://stackoverflow.com/questions/1553248/iphone-and-right-to-left-text. Leider bisher keine Antworten. – kennytm

+0

Danke aber es ist nicht das selbe isuue. – Tiger

+0

Whoa, wie seltsam! Was passiert, wenn Sie eine Zahl in der Mitte des Hebräischen oder am Anfang der Zeichenfolge, aber nach einem Leerzeichen haben? – lawrence

Antwort

0

nicht sicher, ob es schicke Art und Weise, dies zu tun, aber Sie könnten so etwas versuchen:

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." 
+0

Vielen Dank, aber es ist nicht das Problem. Es wird falsch angezeigt, egal wie ich versuche, es zu bestellen. Etwas mit dem hebräischen Display auf dem Bildschirm. Zum Beispiel: 1. יםם שששש בבבבקק Und: י .1 .יםם שששש בבבבקק Wird auf die gleiche Weise auf dem Bildschirm angezeigt – Tiger

22

Sie brauchen keine Einstellung auf UILabel zu ändern, setzen Sie einfach das Zeichen mit Unicode 0x200F vor Deine Zeichenfolge. Dies ist der Grund:

In Unicode haben viele Zeichen eine bestimmte Direktionalität, die das System wissen lassen, dass es geschrieben werden muss, sagen wir LTR, wie للام. Der Absatz verwendet normalerweise die Richtung seines ersten Zeichens. Aus diesem Grund wird Ihre Zeichenfolge ohne die Nummer automatisch von rechts nach links eingegeben.

Jetzt haben einige Zeichen, wie Zahlen, "schwache" Direktionalität, also nehmen sie im Grunde genommen das ihrer Umgebung. Wenn Sie "1. בבבבקק" eingeben, sieht das System zuerst 1, also die übliche LTR-Richtung. Das Ändern der Ausrichtung hilft nicht, da der gesamte Text nur nach rechts oder in der Mitte verschoben wird.

Um dieses Problem zu lösen, verfügt Unicode über zwei Markierungszeichen (LTR: 0x200E, RTL: 200F). Diese sind unsichtbar, diktieren aber die Direktionalität. Während also die "1. בבוקר" ist ...

  1. בבוקר

wenn Sie "# x200F" + "1. בבוקר" wird es wie folgt angezeigt:

1. בבוקר

+0

Können wir irgendwie RTL & LTR in einem UITextView verwechseln? Es scheint, dass nur das erste Marker-Zeichen (LTR oder RTL) geparst wird, so dass ich keinen bidirektional geschriebenen Text anzeigen kann (eine Zeile in LTR, die zweite Zeile in RTL und die Thirs in LTR) – konradowy

+0

thank du, das hat mein problem gelöst, aber woher hast du diese info bekommen, ich habe viel gesucht bis ich deinen post gefunden habe. – DeyaEldeen

+0

Danke, das hat mir wirklich geholfen, einen Fehler zu beheben, den ich zu lange verbracht habe. Ich kann jetzt 20+ Tabs schließen ;-) – adnan

15

Aufbauend auf Mos große Antwort:

Dies ist der Code Obj-C:

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

Und es funktioniert tatsächlich ...

+0

Das Einfügen dieses Codes an der Vorderseite der Zeichenfolge funktionierte nicht für mich. –

6

hatte ich ein etwas anderes Problem, aber Mo Antwort gab mir den Hinweis.

Ich wollte einen LTR-Text (wie "abcd") in RTL-Richtung ("dcba") angezeigt bekommen, ohne selbst die String-Umkehrung zu tun. Stellt sich heraus, die Zeichenfolge zwischen \u202E und \u202C umschließt den Trick.

Ich empfehle auch die folgende Seite zu lesen, da es eine sehr gute Erklärung für all diese Unicode-Magie gibt:

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

+0

Dies funktionierte einwandfrei –

5

Swift jemand?

extension String { 
    func stringByForcingWritingDirectionLTR() -> String { 
     return "\u{200E}".stringByAppendingString(self) 
    } 

    func stringByForcingWritingDirectionRTL() -> String { 
     return "\u{200F}".stringByAppendingString(self) 
    } 
} 
+0

diese Lösung hat nicht funktioniert – JAHelia