Ios hitTest关闭键盘导致的奇怪行为
我在谷歌上搜索了如何在iOS中触摸UITableView中的空白区域时关闭键盘,有几种方法可以解决这个问题。与使用委托、UIAppgestureRecognitizer一样,Ios hitTest关闭键盘导致的奇怪行为,ios,keyboard,hittest,dismiss,Ios,Keyboard,Hittest,Dismiss,我在谷歌上搜索了如何在iOS中触摸UITableView中的空白区域时关闭键盘,有几种方法可以解决这个问题。与使用委托、UIAppgestureRecognitizer一样,-(void)touchesStart:(NSSet*)toucheevent:(UIEvent*)event和-(UIView*)hitTest:(CGPoint)pointwithevent:(UIEvent*)event 我决定通过子类化相应的UIView类来进行hitTest,并像这样重写此方法: - (UI
-(void)touchesStart:(NSSet*)toucheevent:(UIEvent*)event
和-(UIView*)hitTest:(CGPoint)pointwithevent:(UIEvent*)event
我决定通过子类化相应的UIView类来进行hitTest,并像这样重写此方法:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *result = [super hitTest:point withEvent:event];
[self endEditing:YES];
return result;
}
这真的很有效,当我触摸/滚动/滑动/挤压时会关闭虚拟键盘。。。在其他地方,但另一个问题出现了
当我触摸一个UITExtfield对象时,键盘是活动的或显示的,然后我触摸同一个UITExtField对象,这里有个问题,键盘试图解开但不是完全的,在某处中间它开始出现,做这种奇怪的动画。在我们的应用程序中,大多数情况下,当我们触摸相同的UITextField对象时,键盘应该保持静止。有没有一个好的简单的方法来解决这个问题
已解决: 最后,我自己弄明白了。感谢@Wain,感谢@Wain的提示。我在调用[自我终止:是]之前确实检查了结果
代码>。以下是修改后的代码:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *result = [super hitTest:point withEvent:event];
// You can change the following condition to meet your own needs
if (![result isMemberOfClass:[UITextField class]] && ![result isMemberOfClass:[UITextView class]]) {
[self endEditing:YES];
}
return result;
}
检查结果的类
,以便在结束编辑时进行限制。如果命中目标是一个可编辑类(如文本字段或开关),则不要结束编辑会话。根据@iBCode答案,如果我多次选择同一文本字段,则键盘会立即自动隐藏和显示,以避免我在下面以swift语言添加了一个条件和代码
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if let resultView = super.hitTest(point, with: event) {
if resultView.isMember(of: UITextField.self) ||
resultView.isKind(of: UITextField.self) ||
resultView.isMember(of: UITextView.self) ||
resultView.isKind(of: UITextView.self) {
return resultView
}
if !resultView.isMember(of: UITextField.self) && !resultView.isMember(of: UITextView.self) {
endEditing(true)
}
return resultView
}
return nil
}
在结束编辑会话之前,为什么不检查结果是什么呢?请使用此链接,这是希望,否则请更改此[self-endEditing:YES];进入[自我观点编辑:是]@如何检查,比如如果结果是UITextField对象,直接返回并跳过endEditing,您能描述更多细节吗?@Anbu.Karthik链接对我不起作用,-(void)touchsbegind:(NSSet*)触碰事件:(UIEvent*)如果视图子类来自UIScrollView,则事件
不起作用。同时,我在UITableView的一个子类中重写了这个方法,因此,如果我更改[self-endEditing:YES],可能会导致错误代码>进入[自我查看编辑:是]代码>,因为self
是视图本身。