默认情况下,我的语言不支持iOS,所以unicode不是一个选项,所以我在UITextView上使用嵌入的真正的类型字体
它的大部分工作,但我的问题就像阿拉伯语,希伯来语我的语言是从右到左写的.所以我需要改变文本的方向(非文本对齐).
我做了一些搜索,他们都谈论NSLocale和东西,但可以在代码中更改吗?如果我可以将其改为阿拉伯语/希伯来语,那么它将会工作,我猜,但它应该在代码中完成,因为我不想改变手机的语言.
那么真正的我的文本输入选项呢?任何帮助将不胜感激.
谢谢.
解决方法
你的问题对我真的很感兴趣所以在一小时内我想出了解决方案.它远非完美,但您可以使用它并修复剩余的错误.
这是一个简单的视图控制器,具有文本视图.您可以添加输入文本的文本,也可以使用该值进行设置
这是一个简单的视图控制器,具有文本视图.您可以添加输入文本的文本,也可以使用该值进行设置
-(void) setText:(NSString*) txt;
所以这里是代码:
ReverseTextVC.h
@interface ReverseTextVC : UIViewController <UITextViewDelegate> { NSMutableArray* _lines; UITextView* _tv; } /** Returns reversed text. The lines is also updated. This array contains all lines. You should pass this array again if you want to append the text. */ +(NSString*) reverseText:(NSString*) text withFont:(UIFont*) font carretPosition:(NSRange*) cpos Lines:(NSMutableArray*) lines Bounds:(CGRect) bounds; -(void) setText:(NSString*) txt; @end
ReverseTextVC.m
@implementation ReverseTextVC -(id) init { if( self = [super init] ) { _tv = [[UITextView alloc] initWithFrame: CGRectMake(0,320,480)]; _tv.textAlignment = UITextAlignmentRight; _tv.delegate = self; [self.view addSubview: _tv]; [_tv release]; _lines = [[NSMutableArray alloc] initWithCapacity: 10]; [_lines addObject: [NSMutableString stringWithCapacity: 255]]; } return self; } -(void) dealloc { [_lines release]; [super dealloc]; } -(void) loadView { UIView* v = [[UIView alloc] initWithFrame: CGRectMake(0,20,480)]; self.view = v; [v release]; } -(void) setText:(NSString*) txt { NSString* result = nil; NSRange rng; NSArray* words = [txt componentsSeparatedByString: @" "]; //we should do it iteratively (cause it's the simplest way =) ) for(NSString* word in words) { word = [NSString stringWithFormat: @"%@ ",word]; for(int i=0; i<[word length]; ++i) { NSRange r; r.length = 1; r.location = i; result = [ReverseTextVC reverseText: [word substringWithRange: r] withFont: _tv.font carretPosition: &rng Lines: _lines Bounds: _tv.bounds]; } } _tv.text = result; } #pragma mark - #pragma mark UITextViewDelegate -(BOOL) textView:(UITextView*) textView shouldChangeTextInRange:(NSRange) range replacementText:(NSString*) text { NSRange rng; textView.text = [ReverseTextVC reverseText: text withFont: textView.font carretPosition: &rng Lines: _lines Bounds: textView.bounds]; textView.selectedRange = rng; return NO; } #pragma mark - #pragma mark Static +(NSString*) reverseText:(NSString*) text withFont:(UIFont*) font carretPosition:(NSRange*) cpos Lines:(NSMutableArray*) lines Bounds:(CGRect) bounds { cpos->length = 0; cpos->location = 0; if( [text length] ) { if( ![text isEqualToString: @"\n"] ) { [(NSMutableString*)[lines lastObject] insertString: text atIndex: 0]; } else { [lines addObject: [NSMutableString stringWithCapacity: 255]]; } } else { //backspace //TODO: NSRange del_rng; del_rng.length = 1; del_rng.location = 0; if( [(NSMutableString*)[lines lastObject] length] ) { [(NSMutableString*)[lines lastObject] deleteCharactersInRange: del_rng]; } if( ![(NSMutableString*)[lines lastObject] length] ) { [lines removeLastObject]; } } CGSize sz = [(NSString*)[lines lastObject] sizeWithFont: font]; if( sz.width >= bounds.size.width-15 ) { NSMutableArray* words = [NSMutableArray arrayWithArray: [(NSString*)[lines lastObject] componentsSeparatedByString: @" "]]; NSString* first_word = [words objectAtIndex: 0]; [words removeObjectAtIndex: 0]; [(NSMutableString*)[lines lastObject] setString: [words componentsJoinedByString: @" "]]; [lines addObject: [NSMutableString stringWithString: first_word]]; } NSMutableString* txt = [NSMutableString stringWithCapacity: 100]; for(int i=0; i<[lines count]; ++i) { NSString* line = [lines objectAtIndex: i]; if( i<([lines count]-1) ) { [txt appendFormat: @"%@\n",line]; cpos->location += [line length]+1; } else { [txt appendFormat: @"%@",line]; } } return txt; } @end
希望它帮助你=)