如何禁用UITextField和UISearchBar中的长按手势识别器?
问题描述:
我遇到过许多关于在UItextView中禁用长按的帖子,但是同一个进程不适用于UITextField和UISearchBar。如何禁用UITextField和UISearchBar中的长按手势识别器?
有什么办法可以禁用长按UITextField和UISearchBar,这样我可以避免长按放大镜?
我已经检查过“Disable Magnifying Glass in UITextField”,但给出的解决方案实际上并没有禁用放大镜。它只是不允许在文本之间移动。但仍然显示放大镜。
我想禁用长按 - 以避免Problem,我正面临放大镜。我想现在禁用它。将在我能够解决这个问题时再次启用它。
答
您可以尝试按照禁用只建在长按手势
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;
}
答
一个很好的和干净的方式来做到这一点您可以为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)
}
}
看到这个http://*.com/questions/866200/disable-magnifying-glass-in -uitextfield –
请参阅http://*.com/questions/10640781/disable-magnifying-glass-in-uitextview – Venkat
@Venkat在此线程中给出的答案是在苹果审批过程中失败的。它使用私人api。 – Darshana