gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:15:02 24 4
gpt4 key购买 nike

我用谷歌搜索了如何在 iOS 的 UITableView 中触摸空白区域时关闭键盘,有几种方法可以解决这个问题。就像使用委托(delegate)、UITapGestureRecognizer、- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)事件

我决定通过子类化相应的 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 的提示。在调用 [self endEditing:YES]; 之前,我会检查 result。这是修改后的代码:

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

关于ios - hitTest 关闭导致奇怪行为的键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com