2010-02-02 18 views
17

Tratando de mostrar una cadena hebreo que comienza con un número, siempre muestra el número al final de la cadena, así: 1. יום שישי בבוקרRTL muestra números al final de las líneas

pero necesito el número que se mostrará en el lado derecho del texto-

alguna solución a eso?

ocurre con UILabel & UITextField & UITextView

y tratando de escribir el número en el lado izquierdo también producen el mismo resault.

Jugar con combinaciones de UITextAlignment no será de ayuda.

+0

Consulte http://stackoverflow.com/questions/1553248/iphone-and-right-to-left-text. Desafortunadamente, no hay respuestas hasta el momento. – kennytm

+0

Gracias, pero no es lo mismo es cierto. – Tiger

+0

¡Guau, qué extraño! ¿Qué sucede si tienes un número en el medio del hebreo, o al comienzo de la cadena, pero después de un espacio? – lawrence

Respuesta

0

no está seguro de si hay manera más elegante de hacer esto, pero es posible que desee probar algo como esto:

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

Muchas gracias pero no es el problema. Se mostrará mal no importa cómo voy a tratar de pedirlo. Algo con la pantalla hebrea en la pantalla. Por ejemplo: 1. יום שישי בבוקר Y: י .1 .יום שישי בבוקר Se mostrará de la misma manera en la pantalla – Tiger

22

No es necesario cambiar ninguna configuración en UILabel, sólo hay que poner el personaje con Unicode 0x200F antes tu hilo Esta es la razón:

En Unicode, muchos caracteres tienen una direccionalidad específica, lo que le permite al sistema saber que debe escribirse, por ejemplo, LTR, como سلام. El párrafo usualmente usa la dirección de su primer personaje. Es por eso que su cadena sin el número se escribe de derecha a izquierda automáticamente.

Ahora algunos caracteres, como los números, tienen una direccionalidad "débil", por lo que básicamente toman la de su entorno. Cuando escribe "1. בבוקר", el sistema ve primero 1, por lo que toma la dirección LTR habitual. Cambiar la alineación no ayudará, ya que simplemente cambia todo el texto a la derecha o al centro.

Para resolver este problema, Unicode tiene dos caracteres de marcador (LTR: 0x200E, RTL: 200F). Estos son invisibles, pero dictan la direccionalidad. Así, mientras que "1. בבוקר" es ...

  1. בבוקר

si escribe "# x200F" + "1. בבוקר" se mostrará así:

1. בבוקר

+0

¿Podemos de alguna manera mezclar RTL y LTR en una UITextView? Parece que solo el primer carácter marcador (LTR o RTL) se analiza, por lo que no puedo mostrar un texto que se escribe bidireccional (una línea en LTR, la segunda línea en RTL y los thirs en LTR nuevamente) – konradowy

+0

gracias usted, esto resolvió mi problema, pero de dónde obtuvo esta información, busqué mucho hasta que encontré su publicación. – DeyaEldeen

+0

Gracias, esto realmente me ha ayudado a resolver un error que he gastado demasiado tiempo. Ahora puedo cerrar más de 20 pestañas ;-) – adnan

15

Sobre la gran respuesta de Mo:

Este es el código Obj-C:

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

Y realmente funciona ...

+0

Insertar este código al frente de la cadena no funcionó para mí. –

6

que tenía un problema ligeramente diferente pero la respuesta de Mo me dio la pista.

Quería obtener un texto LTR (como "abcd") visualizado en dirección RTL ("dcba") sin tener que hacer la inversión de cadena. Resulta que el encerrar la cadena entre \u202E y \u202C hace el truco.

también recomiendo la lectura de la siguiente página, ya que da una muy buena explicación de todos estos mágica Unicode:

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

+0

Esto funcionó perfectamente –

5

nadie Swift?

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

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

esta solución no funcionó – JAHelia

Cuestiones relacionadas