1

所以我有一個UITextView我用來做一個可移動的,可編輯的標籤(我以前的搜索顯示這顯然是最好的選擇)。我需要讓用戶雙擊以啓用編輯並將其設置爲第一響應者。我找不到辦法做到這一點,而我所有的其他搜索都出現了過時的答案或模糊的答案。我試過的東西似乎沒有用。我嘗試使用UITextViewDelegate開始編輯,而不是使用textViewDidChangeSelection:選擇文本,但在您更改當前選擇之前它不起作用。我也嘗試使用如下的自定義UITapGestureRecognizerUITextView雙擊編輯

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)]; 
[doubleTap setNumberOfTapsRequired:2]; 
[doubleTap setNumberOfTouchesRequired:1]; 
[newLabel addGestureRecognizer:doubleTap]; 

-(void)doubleTap:(UITapGestureRecognizer *)sender 
{ 
    NSLog(@"Double tap detected"); 
    NSLog(@"Sender view of class %@", [[sender view] class]); 
    UITextView *tappedView = (UITextView *)[sender view]; 
    [tappedView setEditable:YES]; 
    [tappedView becomeFirstResponder]; 
// [tappedView setEditable:NO]; 
} 

雙擊手勢從不被調用。我不知道爲什麼。奇怪的是,它也不會選擇文本,但它是這樣的。它似乎只是打破雙擊手勢。有沒有辦法擺脫標準的雙擊選擇手勢,或修改它?我應該繼承UITextView嗎?如果是,我會改變什麼?

回答

0

子分類UITextView,我將這種方法添加到.m文件。

-(BOOL)canBecomeFirstResponder 
{ 
    if (self.editable == YES){ 
     return YES; 
    } 
    else{ 
    return NO; 
    } 
} 

除了這個,我用

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGesture 
{ 
    return YES; 
} 

這是我找到解決我的問題的最佳途徑。我只想讓雙擊來編輯。我不希望文本選擇,滾動等,直到它被雙擊。爲了futher完成這一點,你需要一個使用UITextViewDelegatetextView.editable = NO

-(void)textViewDidEndEditing:(UITextView *)textView 
{ 
    [textView setEditable:NO]; 
} 
-2

您應該將手勢識別器的目標設置爲文本框。

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:textField action:@selector(doubleTap:)]; 
+0

你能更詳細一點?我不確定我會怎麼做。 – Rob

+0

我編輯了我的答案。 –

+0

錯誤。這樣做是說該文本字段有一個名爲「doubleTap」的方法除非您將文本字段繼承爲實際具有此方法,否則會遇到無法識別的選擇器實例錯誤 – kevinl