Вы можете установить направление записи UITextView, используя селектор setBaseWritingDirection:
UITextView *someTextView = [[UITextView] alloc] init];
[someTextView setBaseWritingDirection:UITextWritingDirectionLeftToRight forRange:[someTextView textRangeFromPosition:[someTextView beginningOfDocument] toPosition:[someTextView endOfDocument]]];
Код немного хитрый, потому что UITextView поддерживает разные части текста с разными направлениями письма. В моем случае я использовал [someTextView textRangeFromPosition: [someTextView beginOfDocument] toPosition: [someTextView endOfDocument]], чтобы выбрать полный текстовый диапазон UITextView. Вы можете настроить эту часть, если ваши потребности отличаются.
Вы также можете проверить, является ли текст в вашем UITextView LTR в RTL. Вы можете сделать это с помощью:
if ([someTextView baseWritingDirectionForPosition:[someTextView beginningOfDocument] inDirection:UITextStorageDirectionForward] == UITextWritingDirectionLeftToRight) {
// do something...
}
Обратите внимание, что я указал начало текста, используя [someTextView beginOfDocument], и провел поиск вперед, используя UITextStorageDirectionForward. Ваши потребности могут отличаться.
Если вы подкласс UITextView, замените все эти примеры кода на «self», а не «someTextView», конечно.
Я рекомендую прочитать о протоколе UITextInput, которому соответствует UITextView, по адресу http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextInput_Protocol/Reference/Reference.html.
Предупреждение об использовании свойства textAlignment в iOS 5.1 или более ранней версии: если вы используете его с этим подходом вместе с установкой основного направления записи, у вас будут проблемы, поскольку текст RTL при выравнивании по левому краю в UITextView фактически выравнивается по правому краю. Задание текста с направлением записи RTL для выравнивания вправо выровняет его по левому краю UITextView.