繁体   English   中英

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

[英]How to disable Long press gesture recogniser in UITextField and UISearchBar?

我遇到很多关于在UItextView中禁用长按的帖子,但是同样的过程对UITextField和UISearchBar不起作用。

有没有办法禁用长按UITextField和UISearchBar所以我可以避免长按放大镜?

我已经检查过“ 在UITextField中禁用放大镜 ”但是解决方案实际上并没有禁用放大镜。 它只是不允许粗略地在文本之间移动。 但仍然显示放大镜。

我想禁用长按 - 以避免我用放大镜面对的问题 我想现在禁用它。 当我能够解决这个问题时,我会再次启用它。

您可以尝试以下禁用仅内置长按手势

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;
}

@Neeraj在Swift 4中回答:

class CustomTextView: UITextView {

   override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {

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

这个组合在一个自定义类中是我唯一能够为我工作的东西,并且在第一次长按时它仍然有时会使放大镜出现:

//swift 4.2
override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer)
{

    if gestureRecognizer.isKind(of: UILongPressGestureRecognizer.self)
    {
        print(gestureRecognizer.name.unwrappedDebugString)
        gestureRecognizer.isEnabled = false
    }
    return super.addGestureRecognizer(gestureRecognizer)
}
override func becomeFirstResponder() -> Bool
{
    for recognizer in self.gestureRecognizers ?? []
    {
        if (recognizer is UILongPressGestureRecognizer)
        {
            recognizer.isEnabled = false
        }
    }
    return super.becomeFirstResponder()
}

一个好的和干净的方法是你可以为UITextField创建一个自定义类,在自定义类中你可以覆盖导致放大视图出现的长按手势。 此自定义类可用于我们不想显示测试字段的放大视图的所有位置。 只需使用下面的类代替UITextField类

class CustomTextView: UITextView {

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM