2

重複の可能性:
カーソルを UITextField の先頭に移動する

こんにちは、テキスト付きのテキストビューがあります。最初にカーソル位置を移動したいのですが、NSMakeRange を使用していますが、なぜ機能しないのかわかりません。私は NSMakeRange is different places を書きましたが、少なくとも一度は実行されることを期待していますが、うまくいきませんでした。これがコードです。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;
    }

}
4

2 に答える 2

21

これは、iOS 6.0 シミュレーターでの私のテストで機能します。

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

メッセージを送信した、タッチ位置に基づいて選択を更新すると思いtextViewDidBeginEditing:ます。そのdispatch_asyncあたりの作品。

于 2012-11-20T08:01:54.013 に答える
0

K i は解決策を見つけました。カーソルが表示される前にカーソル位置を設定しています。 KeyBoardDidShow 通知でコードをカットアンドペーストしたところ、かなりうまくいきました。

于 2012-11-20T07:46:34.800 に答える