捕捉在 UITableView 中显示的 UIWebView 内触摸
Posted
技术标签:
【中文标题】捕捉在 UITableView 中显示的 UIWebView 内触摸【英文标题】:Catch touched inside UIWebView displayed in an UITableView 【发布时间】:2016-03-15 15:51:12 【问题描述】:我正在开发一个 ios 应用程序,它用于 UITableView 的一个视图。 当单元格被触摸时,我想将它们从默认大小(常量)调整为实际大小(存储在选项卡中)。
我首先尝试将此代码放在didSelectRowAtIndexPath
函数中,但从未调用此函数...
我浏览了一些教程,我的班级已经有了这个: - 我的课程扩展了 UITableViewDelegate、UITableViewDataSource - 在 ViewDidLoad 我有这个代码:
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.allowsSelection = true
我可能知道问题出在哪里。我的 UITableView 是分组的,每个部分由一个单元格组成。 每个单元格都是一个自定义单元格,其中包含一个 UIWebView。总结一下 : 我的视图 > tableView > MyCellCustom > MyWebViewCustom
我读到触动的事件可能已被 WebView “吃掉”。如何知道问题是否来自于此?如何避免这种情况?
顺便说一句,我什至不确定问题是否来自于此。我只是感到沮丧,因为我经常使用didSelectRowAtIndexPath
,而我从来没有遇到过这种麻烦。
然后,我尝试像这样将UITapGestureRecognizer
添加到我的所有 UIWebView 中:
let indicationTap = UITapGestureRecognizer()
indicationTap.delegate = self
indicationTap.addTarget(self, action: "SingleTap:")
indicationTap.numberOfTapsRequired = 1
indicationTap.numberOfTouchesRequired = 1
self.indication.webView.scrollView.addGestureRecognizer(indicationTap)
然后这个函数:
func SingleTap(gestureRecognizer:UIGestureRecognizer)
print("touch detected")
但它仍然无法正常工作... 我不知道出了什么问题以及在 UIWebView 中处理触摸事件的最佳方式是什么。
提前感谢您的回答, 祝你今天过得愉快。 汤姆。
【问题讨论】:
嗨汤姆,如果可以删除用户交互到 web 视图addGestureRecognizer
in cellForRowAtIndexPath
为每个 Web 视图查看是否是问题所在。
您好,我了解您的问题。由于 webview,触摸忽略。采取点击手势并将此点击手势添加到每个单元格中的 web 视图。然后你可以处理 webview 上的点击。为了更好地理解,请参阅link
我尝试添加 TapGestureRecognizer,但它也没有工作......我已经更新了我的问题,让你看看我做了什么
【参考方案1】:
如果您需要在UIWebView
中保留触摸事件,并且还需要让触摸事件触发行选择,则应将UIWebView
包装在UIView
的子类中,然后在didSelectRowAtIndexPath:
中使用它UITableView
的方法。
这应该会有所帮助:How to Get webview from UITableView didselectrowatindexpath?
【讨论】:
我在 UIWebView 类的 init 方法中添加了“self.userInteractionEnabled = false”,但问题仍然存在。实际上我需要保持 userInteraction 启用,因为我有基于 html 的功能,它加载在里面 ... @TomGiraudet 我编辑的答案在这种情况下可能会更有帮助。 我的 WebView 已经包裹在 UITableViewCell 的子类中以上是关于捕捉在 UITableView 中显示的 UIWebView 内触摸的主要内容,如果未能解决你的问题,请参考以下文章