UItextView阿拉伯语文本右对齐

时间:2012-03-26 09:47:03

标签: iphone objective-c ios uitextview inputview

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

6 个答案:

答案 0 :(得分:16)

您可以使用setBaseWritingDirection选择器设置UITextView的书写方向:

UITextView *someTextView = [[UITextView] alloc] init];
[someTextView setBaseWritingDirection:UITextWritingDirectionLeftToRight forRange:[someTextView textRangeFromPosition:[someTextView beginningOfDocument] toPosition:[someTextView endOfDocument]]];

代码有点棘手,因为UITextView支持文本的不同部分具有不同的书写方向。在我的例子中,我使用[someTextView textRangeFromPosition:[someTextView beginningOfDocument] toPosition:[someTextView endOfDocument]]来选择UITextView的全文范围。如果您的需求不同,您可以调整该部分。

您可能还想检查UITextView中的文本是否为LTR到RTL。你可以这样做:

if ([someTextView baseWritingDirectionForPosition:[someTextView beginningOfDocument] inDirection:UITextStorageDirectionForward] == UITextWritingDirectionLeftToRight) {
    // do something...
}

请注意,我使用[someTextView beginOfDocument]指定了文本的开头,并使用UITextStorageDirectionForward向前搜索。您的需求可能会有所不同。

如果你继承UITextView,那么用“self”替换所有这些代码示例,当然不是“someTextView”。

我建议在http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextInput_Protocol/Reference/Reference.html阅读UITextView符合的UITextInput协议。

关于在iOS 5.1或更早版本中使用textAlignment属性的警告:如果您将此方法与设置基本书写方向一起使用,则会出现问题,因为在UITextView中左对齐时的RTL文本实际上在视觉上与右侧对齐。将RTL书写方向设置为右对齐将使其与UITextView的左侧对齐。

答案 1 :(得分:4)

尝试textAlignment属性。

textView.textAlignment = UITextAlignmentRight;

看看UITextView Class Reference

编辑:也许CATextLayer可以帮到你,有人建议使用这个课程来自定义文字,但我从未亲自使用过它......

否则,您可以强制textView以UITextFieldDelegate方法反转您的输入:

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

只要用户在文本字段中键入新字符或删除现有字符,文本字段就会调用此方法。 在这里,您可以使用新的NSString替换输入,您可以将字符从右向左放置。

希望这是有道理的......

啊......别忘了设置

textView.textAlignment = UITextAlignmentRight;

在右侧移动提示。

答案 2 :(得分:1)

试试这段代码:

yourtextview.textAlignment = UITextAlignmentRight;

希望这会对你有所帮助。

答案 3 :(得分:0)

此处或任何其他帖子中没有人提及的是确保您没有为TextView调用sizeToFit。它简单地将textView(而不是文本)对齐到左侧,从而产生文本从左到右而不是从右到左的错觉。

答案 4 :(得分:0)

如果您是从故事板创建UI,则首要项目的领先或尾随空间和值的设置约束将是尊重语言方向

答案 5 :(得分:0)

您可以迅速使用此代码

textView.makeTextWritingDirectionRightToLeft(true)