我遇到很多关于在UItextView中禁用长按的帖子,但是同样的过程对UITextField和UISearchBar不起作用。
有没有办法在UITextField和UISearchBar上禁用长按,这样可以避免长按放大镜?
我已经检查了" Disable Magnifying Glass in UITextField"但解决方案是实际上并没有禁用放大镜。它只是不允许粗略地在文本之间移动。但仍然显示放大镜。
我想禁用长按 - 以避免我用放大镜面对的Problem。我想现在禁用它。当我能够解决这个问题时,我会再次启用它。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
在Swift 4中的@Neeraj回答:
class CustomTextView: UITextView {
override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
if gestureRecognizer.isKind(of: UILongPressGestureRecognizer.self) {
gestureRecognizer.isEnabled = false
}
return super.addGestureRecognizer(gestureRecognizer)
}
}
答案 2 :(得分:0)
自定义类中的这种组合是我唯一能为我工作的东西,在第一次长按时,有时仍会使放大镜出现:
//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()
}
答案 3 :(得分:-1)
这样做的一个好的和干净的方法是你可以为UITextField创建一个自定义类,在自定义类中你可以覆盖导致放大视图出现的长按手势。 此自定义类可用于我们不想显示测试字段的放大视图的所有位置。只需使用下面的类代替UITextField类
class CustomTextView: UITextView {
override func addGestureRecognizer(gestureRecognizer: UIGestureRecognizer) {
if (gestureRecognizer.isKindOfClass(UILongPressGestureRecognizer)) {
gestureRecognizer.enabled = false;
}
super.addGestureRecognizer(gestureRecognizer)
return
}
}