我有
UITableView
,它正在移动/折叠/展开,还有一个与键盘一起移动的底部栏。显示键盘时,用户可以单击文本字段外部以隐藏键盘
问题是
UITableView
接收到didSelectRow
事件但触摸位置不正确。看起来表格等待键盘关闭动画,然后才处理触摸(当单元格已经移动时)。
这种情况下如何让
UITableView
接收到正确的触摸位置?
不起作用:
tableView.delaysContentTouches = false
scrollView.delaysContentTouches = false //because scrollView contains tableView
+延迟
resignFirstResponder
允许 UITableView
处理触摸的速度快于键盘被关闭的速度。结果 - 有些表格有时会忽略触摸。
作品:
修改库代码:
tapGesture.cancelsTouchesInView = true
UIResponder.currentFirstResponder?.resignFirstResponder()
此行启动动画并立即修改帧。因此,您需要以某种方式获取触摸位置并将其传递给您需要的视图,然后才能执行。可以通过传递内部委托方法来添加视图(scrollView用于其他目的,不适合这种情况),并且可以模拟触摸,如下所示:
tableView?.touchesBegan([touch], with: nil)
tableView?.touchesEnded([touch], with: nil)