1、在UITableView中使用选择文本和复制功能
产生的问题:因为YYTextView本身也是一个UIScrollView,所以会导致手势冲突
解决方案:
NotificationCenter.default.addObserver(self,
selector:#selector(willShowEditMenu),
name: NSNotification.Name.UIMenuControllerWillShowMenu,
object:nil)
NotificationCenter.default.addObserver(self,
selector:#selector(didHideEditMenu),
name: NSNotification.Name.UIMenuControllerDidHideMenu,
object:nil)
// 防止复制时 滑动事件和tableview的冲突 导致复制错误
@objc func willShowEditMenu() {
self.tableView.canCancelContentTouches = false
self.tableView.delaysContentTouches = false
}
@objc func didHideEditMenu() {
self.tableView.canCancelContentTouches = true
self.tableView.delaysContentTouches = true
}
解释下canCancelContentTouches和delaysContentTouches两个属性
delaysContentTouches和canCancelContentTouches都是scrollView的一个属性,在讲这两个属性之前,首先要讲下scrollView的一个机制。
从你的手指touch屏幕开始,scrollView开始一个timer,如果:
150ms内如果你的手指没有任何动作,消息就会传给subView。
150ms内手指有明显的滑动(一个swipe动作),scrollView就会滚动,消息不会传给subView。
150ms内手指没有滑动,scrollView将消息传给subView,但是之后手指开始滑动,scrollView传送touchesCancelled消息给subView,然后开始滚动。
delaysContentTouches:默认值为YES。如果设置为NO,则会立即把事件传递给subView。
canCancelContentTouches:默认为YES,如果设置为NO,这消息一旦传递给subView,这scroll事件不会再发生。