2010-10-08 25 views
6

Total Objective-C/Cocoa在這裏觸摸noob,注意。如何攔截UITextView上的長按?

我試圖攔截用戶長按UITextView(放大鏡然後出現與插入符號定位器),然後釋放觸摸,即通常「選擇」和「全選」選項出現時,放大鏡後。我想用我自己的自定義操作替換它,然後執行。

這可能嗎?

回答

14

你可以嘗試這樣的事情:

禁用內置長按識別

for (UIGestureRecognizer *recognizer in textView.gestureRecognizers) { 
    if ([recognizer isKindOfClass:[UILongPressGestureRecognizer class]]){ 
    recognizer.enabled = NO; 
    } 
} 

然後添加@ Altealice代碼自己

UILongPressGestureRecognizer *myLongPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:<your target> action:@selector(<your custom handler>)]; 
[textView addGestureRecognizer:myLongPressRecognizer]; 
[myLongPressRecognizer release]; 
+0

這看起來不錯...但有沒有辦法讓我保持放大鏡?我主要感興趣的是放大鏡後的長按釋放 - – Epaga 2010-10-09 07:59:56

+0

嗯,以前沒有嘗試過。您可以嘗試覆蓋處理放大鏡的方法,以在處理結束時添加處理,但這可能是一種私有方法,因此可能無法與Apple審覈團隊一起使用。另一種方法是自己重新實施放大鏡。 – Altealice 2010-10-12 16:58:38

+2

我喜歡這裏的想法,但遺憾的是這種方法無效。可能是UITextView中的隱藏子視圖,它會獲取識別器? – BadPirate 2011-05-20 19:15:54

1

斯威夫特版本禁用內置長按識別器:

if let actualRecognizers = self.sourcesTextView.gestureRecognizers { 
    for recognizer in actualRecognizers { 
     if recognizer.isKindOfClass(UILongPressGestureRecognizer) { 
      recognizer.enabled = false 
     } 
    } 
} 

此解決方案的工作原理,但要小心,它會禁用textView交互,所以按下時鏈接將不會突出顯示,並且文本將不可選。

0

如果刪除了[LongPressgesture setMinimumPressDuration:2.0];它會運行,因爲標籤的手勢將被調用來啓動編輯文本字段...或只是實現這個手勢代表功能

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