如何禁用UITextField和UISearchBar中的长按手势识别器?

问题描述:

我遇到过许多关于在UItextView中禁用长按的帖子,但是同一个进程不适用于UITextField和UISearchBar。如何禁用UITextField和UISearchBar中的长按手势识别器?

有什么办法可以禁用长按UITextField和UISearchBar,这样我可以避免长按放大镜?

我已经检查过“Disable Magnifying Glass in UITextField”,但给出的解决方案实际上并没有禁用放大镜。它只是不允许在文本之间移动。但仍然显示放大镜。

我想禁用长按 - 以避免Problem,我正面临放大镜。我想现在禁用它。将在我能够解决这个问题时再次启用它。

+2

看到这个http://*.com/questions/866200/disable-magnifying-glass-in -uitextfield –

+0

请参阅http://*.com/questions/10640781/disable-magnifying-glass-in-uitextview – Venkat

+0

@Venkat在此线程中给出的答案是在苹果审批过程中失败的。它使用私人api。 – Darshana

您可以尝试按照禁用只建在长按手势

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

一个很好的和干净的方式来做到这一点您可以为UITextField创建一个自定义类,并且在自定义类中,您可以覆盖导致放大视图出现的长按手势。 此自定义类可以用于我们不想显示测试字段的放大视图的所有地方。只要使用下面的类来代替UITextField类

class CustomTextView: UITextView { 

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

@Neeraj答案的斯威夫特4:

class CustomTextView: UITextView { 

    override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) { 

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