UItextView арабский текст выровнен по правому краю - PullRequest
6 голосов
/ 26 марта 2012

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

-(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 ]

16 голосов
/ 02 июня 2012

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

4 голосов
/ 26 марта 2012

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

textView.textAlignment = UITextAlignmentRight;

Взгляните на Справочник по классам UITextView .

РЕДАКТИРОВАТЬ: Может быть CATextLayer может помочь вам, кто-то предлагает использовать этот класс для настройки текста, но я никогда не использовал его лично ...

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

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

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

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

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

textView.textAlignment = UITextAlignmentRight;

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

1 голос
/ 26 марта 2012

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

yourtextview.textAlignment = UITextAlignmentRight;

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

0 голосов
/ 28 декабря 2015

Если вы создаете пользовательский интерфейс из раскадровки, задайте ограничение для поля «Лидер» или «Конец» и значение первого элемента будет Уважать направление языка

0 голосов
/ 10 октября 2015

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

...