在开始UItextview时移动光标

时间:2012-11-20 07:30:31

标签: ios uitextview

  

可能重复:
  Moving the cursor to the beginning of UITextField

你好我有一个文本的textview我想在开始时移动光标位置我已经使用NSMakeRange但我不知道为什么它不起作用。我写过NSMakeRange是不同的地方,希望它至少运行一次但不起作用。这是代码。 thx提前

- (void)viewDidLoad
{
    [super viewDidLoad];    
    apnatxtView.textColor=[UIColor lightGrayColor];
    apnatxtView.text=@"Description goes here";
    totalLenght=apnatxtView.text.length;
     apnatxtView.selectedRange=NSMakeRange(0,0);    
}


- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{

apnatxtView.selectedRange=NSMakeRange(0,0);  
    return YES;


}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    [apnatxtView resignFirstResponder];

}

- (void)textViewDidChange:(UITextView *)textView{


    if (apnatxtView.text.length == 0) {
        apnatxtView.textColor= [UIColor lightGrayColor];
        apnatxtView.text=@"Description goes here";
        apnatxtView.selectedRange=NSMakeRange(0, 0);
    }



}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{


    if (apnatxtView.textColor == [UIColor lightGrayColor]) {
        apnatxtView.textColor=[UIColor blackColor];
       // apnatxtView.text=@"Description goes here";
        apnatxtView.text=nil;
        return YES;
    }

}

2 个答案:

答案 0 :(得分:21)

这适用于我在iOS 6.0模拟器上的测试:

- (void)textViewDidBeginEditing:(UITextView *)textView {
    dispatch_async(dispatch_get_main_queue(), ^{
        textView.selectedRange = NSMakeRange(0, 0);
    });
}

我猜它会在发送textViewDidBeginEditing:消息后根据触摸位置更新选择。 dispatch_async可以解决这个问题。

答案 1 :(得分:0)

K我找到了解决方案。我在光标出现之前设置光标位置我在KeyBoardDidShow通知中剪切并粘贴代码,它工作得非常好。