Ios hitTest关闭键盘导致的奇怪行为

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

我在谷歌上搜索了如何在iOS中触摸UITableView中的空白区域时关闭键盘,有几种方法可以解决这个问题。与使用委托、UIAppgestureRecognitizer一样,
-(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
是视图本身。