2016-12-02 71 views
2

我遇到過許多關於在UItextView中禁用長按的帖子,但是同一個進程不適用於UITextField和UISearchBar。如何禁用UITextField和UISearchBar中的長按手勢識別器?

有什麼辦法可以禁用長按UITextField和UISearchBar,這樣我可以避免長按放大鏡?

我已經檢查過「Disable Magnifying Glass in UITextField」,但給出的解決方案實際上並沒有禁用放大鏡。它只是不允許在文本之間移動。但仍然顯示放大鏡。

我想禁用長按 - 以避免Problem,我正面臨放大鏡。我想現在禁用它。將在我能夠解決這個問題時再次啓用它。

+2

看到這個http://stackoverflow.com/questions/866200/disable-magnifying-glass-in -uitextfield –

+0

請參閱http://stackoverflow.com/questions/10640781/disable-magnifying-glass-in-uitextview – Venkat

+0

@Venkat在此線程中給出的答案是在蘋果審批過程中失敗的。它使用私人api。 – Darshana

回答

1

您可以嘗試按照禁用只建在長按手勢

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

委託方法對所有: -

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
return NO; 
} 
+0

如果我將從shouldChangeCharactersInRange返回NO,它將不允許我在文本字段中進行編輯。 – Darshana

+0

如果您需要編輯,則僅通過第一種方法禁用長按手勢 –

+0

刪除長按手勢適用於TextField,但不適用於UISearchbar。 – Darshana

0

一個很好的和乾淨的方式來做到這一點您可以爲UITextField創建一個自定義類,並且在自定義類中,您可以覆蓋導致放大視圖出現的長按手勢。 此自定義類可以用於我們不想顯示測試字段的放大視圖的所有地方。只要使用下面的類來代替UITextField類

class CustomTextView: UITextView { 

    override func addGestureRecognizer(gestureRecognizer: UIGestureRecognizer) { 
     if (gestureRecognizer.isKindOfClass(UILongPressGestureRecognizer)) { 
      gestureRecognizer.enabled = false; 
     } 
     super.addGestureRecognizer(gestureRecognizer) 
     return 
    } 
} 
2

@Neeraj答案的斯威夫特4:

class CustomTextView: UITextView { 

    override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) { 

    if gestureRecognizer.isKind(of: UILongPressGestureRecognizer.self) { 
       gestureRecognizer.isEnabled = false 
    } 
    return super.addGestureRecognizer(gestureRecognizer) 
    } 
} 
相關問題