8

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; 
}
4

6 に答える 6

17

setBaseWritingDirection セレクターを使用して、UITextView の書き込み方向を設定できます。

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 をサブクラス化する場合は、これらすべてのコード サンプルを「someTextView」ではなく「self」に置き換えてください。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextInput_Protocol/Reference/Reference.htmlで、UITextView が準拠する UITextInput プロトコルについて読むことをお勧めします。

iOS 5.1 以前で textAlignment プロパティを使用する場合の警告: 基本の書き込み方向を設定することと一緒にこのアプローチを使用すると、RTL テキストが UITextView で左に配置されると、実際には視覚的に右に配置されるため、問題が発生します。RTL の書き込み方向でテキストを右揃えに設定すると、UITextView の左揃えになります。

于 2012-06-02T02:23:51.363 に答える
4

textAlignmentプロパティを試してください。

textView.textAlignment = UITextAlignmentRight;

UITextView Class Referenceを見てください。

編集: CATextLayerが役立つかもしれません。このクラスを使用してテキストをカスタマイズすることを誰かが提案していますが、個人的には使用したことがありません...

それ以外の場合は、 UITextFieldDelegateメソッドで textView に入力を強制的に逆にすることができます。

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

ユーザーがテキスト フィールドに新しい文字を入力するか、既存の文字を削除するたびに、テキスト フィールドはこのメソッドを呼び出します。ここで、入力を、文字を右から左に配置する新しい NSString に置き換えることができます。

これが理にかなっていることを願っています...

あぁ…設定忘れないで

textView.textAlignment = UITextAlignmentRight;

プロンプトを右側に移動します。

于 2012-03-26T09:55:29.753 に答える
1

このコードを試してください:

yourtextview.textAlignment = UITextAlignmentRight;

これがお役に立てば幸いです。

于 2012-03-26T09:58:17.977 に答える
0

ストーリーボードから UI を作成している場合、Lead または Trailing space への設定制約と First Item の値は、Respect Language Directionになります。

于 2015-12-28T07:01:00.873 に答える
0

ここまたは他の投稿で誰も言及していないことは、TextView に対して sizeToFit を呼び出していないことを確認することです。textView (テキストではなく) を左に揃えるだけで、テキストが右から左ではなく左から右に表示されるように見えます。

于 2015-10-10T11:42:01.393 に答える