UItextView арабский текст выровнен справа

Используя мою обычную арабскую клавиатуру в интерфейсе ввода-вывода UItextView, я заполняю свой текстовый текст арабским текстом, но не могу получить выравнивание текста в соответствии... Нужна помощь для выравнивания текста вправо.

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView{
 if(showCustomKeyboard==NO){
 [textView resignFirstResponder];
 textView.inputView=nil;
 [textView becomeFirstResponder];
 return YES; 
}
 else{
 [textView resignFirstResponder];
 if(customKeyboard==nil){
 customKeyboard=[[CustomKeyboard alloc] initWithFrame:CGRectMake(0, 264, 320, 216)];
 [customKeyboard setDelegate:self];
 } 
 if([[UIApplication sharedApplication] respondsToSelector:@selector(inputView)]){
 if (textView.inputView == nil) {
 textView.inputView = customKeyboard;
 [textView becomeFirstResponder];
 }
 } 
 self.customKeyboard.currentField=textView;
 [textView becomeFirstResponder];
 }
 return YES; 
}
5 ответов

Вы можете задать направление записи 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.


Попробуйте textAlignment свойство.

textView.textAlignment = UITextAlignmentRight;

Посмотрите Справочник по классу UITextView.

EDIT: Возможно, CATextLayer может вам помочь, кто-то предлагает использовать этот класс для настройки текста, но я никогда не использовал его лично...

В противном случае вы можете заставить свой текстовый файл изменить ваш вход в UITextFieldDelegate метод:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

Текстовое поле вызывает этот метод всякий раз, когда пользователь вводит новый символ в текстовое поле или удаляет существующий символ. Здесь вы можете заменить свой ввод новой NSString, где вы поместите символы справа налево.

Надеюсь, это имеет смысл...

А... Не забудьте установить

textView.textAlignment = UITextAlignmentRight;

чтобы переместить приглашение справа.


Попробуйте этот код:

yourtextview.textAlignment = UITextAlignmentRight;

Надеюсь, это поможет вам.


Если вы создаете пользовательский интерфейс из Storyboard, установленное ограничение на Lead или Trailing space и значение First Item будет Respect Language Direction


Что-то, о чем никто не упоминал здесь или о каком-либо другом сообщении, заключается в том, что вы не вызывали sizeToFit для TextView. Он просто выравнивает текст (не текст) слева, что дает иллюзию, что текст остается справа, а не справа налево.

licensed under cc by-sa 3.0 with attribution.