2013-07-10 51 views
0

當用戶點擊UITextView時,我需要在UITextView中將遊標設置在第一個位置。 NSMakeRange沒有幫助我,但我找到解決方案How to set cursor position for UITextView on user input?UITapGestureRecognizer在UITextView中觸發一次

我在我的UITextView中添加tapGesture。但是它在第一次只工作一次,爲什麼?

textViewMessage.gestureRecognizers = nil; 
UITapGestureRecognizer *tapTextView = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTextView)]; 
[textViewMessage addGestureRecognizer:tapTextView]; 

而且這種方法只調用一次

- (void)tapTextView 
{ 
    [textViewMessage becomeFirstResponder]; 
} 
+1

你確定它只被調用過一次嗎?這很可能是因爲你沒有注意到它是第二次,因爲textView已經是第一響應者,因此屏幕上沒有任何事情發生。 – Stavash

+0

我在這種方法中添加了斷點,它只在第一次敲擊時才調用一次。然後我在屏幕上選擇textFields,然後再次點擊UITextView,但它成爲firstResponder而不調用我的方法。除了第一次以外,光標不在我的文本的開始處 – user2213271

回答

1

當TextView中成爲第一個響應者,你無法趕上觸摸它的事件。我很快發現了一種駭人的方式,但我相信你可以找到更好的方法。

- (void)tapTextView 
{ 
    [textViewMessage setEditable:YES]; 
    [textViewMessage becomeFirstResponder]; 
} 

- (BOOL)textViewShouldEndEditing:(UITextView *)textView { 
    if ([textView isFirstResponder]) { 
     [textView setEditable:NO]; 
    } 
    return YES; 
} 

您需要將UITextViewDelegate添加到您的頭文件。希望能幫助到你。

1

試試這個:子類的UITextView並添加以下方法:

- (BOOL)becomeFirstResponder 
{ 
    BOOL result = [super becomeFirstResponder]; 

    if (result) 
    { 
     //Take your cursor to any position you want 
    } 
    return result; 
} 

- (BOOL)resignFirstResponder 
{ 
    BOOL result = [super resignFirstResponder]; 

    if (result) 
    { 
     //Do anything you need when text view resigns 
    } 
    return result; 
}