我有一个包含两个子视图的视图:一个由UIPageViewController顶部的自定义视图构成的栏
我想避免用户同时触摸栏和pageView(栏控制页面视图并同时触摸它们可能会导致崩溃)
我所做的是将条形图视图isExclusiveTouch属性设置为true。
override func awakeFromNib() {
[...]
isExclusiveTouch = true
}
documentation表示如果视图isExclusiveTouch属性设置为true,则同一窗口中的其他视图不应该能够接收任何触摸事件。然而,我可以在触摸栏时触摸并滚动页面视图。
在另一个屏幕上我有多个由自定义视图组成的开关,我想避免同时触摸多个开关,所以我也将它们的isExclusiveTouch设置为true,但仍然可以同时触摸其中两个。
我想念isExclusiveTouch根本不起作用吗?
答案 0 :(得分:2)
exclusiveTouch仅在此期间阻止其他视图中的触摸 在独家触摸视图中有活跃的触感。也就是说,如果 你把手指放在独家触摸视图中,触摸将无法启动 在其他视图中,直到你抬起第一根手指。它并没有阻止 如果当前没有触摸,则从其他视图开始触摸 在exclusiveTouch视图中。
要真正使此视图成为屏幕上唯一可以接收的 触摸你需要在所有内容之上添加另一个视图 否则抓住其余的触摸,或者在某处继承视图 你的层次结构(或你的UIWindow本身)和覆盖 hitTest:withEvent:在文本视图可见时始终返回文本视图, 或者不为文本视图中的触摸返回nil。
答案 1 :(得分:0)
我可以做这个工作: 我在条形图的前面添加了一个透明视图,并将它的isExclusiveTouch设置为true。
所以我的酒吧现在就像这样
barView -|- subview 1
|- subview 2
|- [...]
|- front view (transparent view for exclusive touch) <- new
barView上的isExclusiveTouch不起作用,但在前视图上使用它。
我也可以使用相同的解决方案为我的交换机工作。