2010-02-02 9 views
17

Попытки отобразить ивритскую строку, начинающуюся с номером, всегда отображается число в конце строк следующим образом: 1. יום שישי בבוקרRTL показывает цифры в конце строк

но мне нужен номер для отображения в правой части текста -

любое решение для этого?

Это происходит с UILabel & UITextField & UITextView

и пытается записать номер на левой стороне также производят один и тот же resault.

Игра с комбинациями UITextAlignment не поможет.

+0

См. Http://stackoverflow.com/questions/1553248/iphone-and-right-to-left-text. К сожалению, ответов пока нет. – kennytm

+0

Спасибо, но это не тот же isuue. – Tiger

+0

Эй, как странно! Что произойдет, если у вас есть число в середине иврита или в начале строки, но после пробела? – lawrence

ответ

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

Большое спасибо, но это не проблема. Он будет отображаться неправильно, независимо от того, как я попробую его заказать. Somthing с изображением на иврите на экране. Для примера: 1. יום שישי בבוקר И: י .1 .יום שישי בבוקר Будет отображаться таким же образом на экране – Tiger

22

Вам не нужно менять настройки на UILabel, просто поместите символ с юникода 0x200F перед тем ваша строка. Вот почему:

В Юникоде много символов имеют определенную направленность, что позволяет системе знать, что она должна быть написана, скажем, LTR, как سلام. Параграф обычно использует направление своего первого символа. Вот почему ваша строка без номера вводится автоматически справа налево.

Теперь некоторые персонажи, как и числа, имеют «слабую» направленность, поэтому они в основном воспринимают окружающие. Когда вы вводите «1. בבוקר», система сначала видит 1, поэтому берет обычное направление LTR. Изменение выравнивания не поможет, поскольку оно просто сдвигает весь текст вправо или в центр.

Для решения этой проблемы Unicode имеет два маркерных символа (LTR: 0x200E, RTL: 200F). Они невидимы, но диктуют направленность. Таким образом, хотя "1. בבוקר" является ...

  1. בבוקר

если вы наберете "# x200F" + "1. בבוקר" будет отображаться как это:

1. בבוקר

+0

Можем ли мы каким-то образом перепутать RTL и LTR в одном UITextView? Кажется, что только первый маркерный символ (LTR или RTL) разобран, поэтому я не могу показать текст, который написан двунаправленным (одна строка в LTR, вторая строка в RTL и повторение в LTR) – konradowy

+0

thank вы, это решило мою проблему, но откуда вы получили эту информацию, я много искал, пока не нашел ваш пост. – DeyaEldeen

+0

Спасибо, это действительно помогло мне решить ошибку, которую я слишком долго тратил. Теперь я могу закрыть 20 + tabs ;-) – adnan

15

Опираясь на большой ответ Мо:

Это код Obj-C:

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

И это на самом деле работает ...

+0

Вставка этого кода перед строкой не помогла мне. –

6

У меня была немного другая проблема, но ответ Мо дал мне ключ.

Я хотел получить текст LTR (например, "abcd"), отображаемый в RTL-направлении ("dcba"), без необходимости выполнять перестановку строк. Оказывается, заключая в себе строку между \u202E и \u202C делает трюк.

Я также рекомендую прочитать следующую страницу, поскольку это дает очень хорошее объяснение все этому юникод магии:

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

+0

Это отлично работает –

5

Swift никого?

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

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

Это решение не работает – JAHelia

Смежные вопросы