isExclusiveTouch无法处理自定义UIView

时间:2017-02-02 09:28:19

标签: ios iphone swift uikit

我有一个包含两个子视图的视图:一个由UIPageViewController顶部的自定义视图构成的栏

我想避免用户同时触摸栏和pageView(栏控制页面视图并同时触摸它们可能会导致崩溃)

我所做的是将条形图视图isExclusiveTouch属性设置为true。

override func awakeFromNib() {
    [...]
    isExclusiveTouch = true
}

documentation表示如果视图isExclusiveTouch属性设置为true,则同一窗口中的其他视图不应该能够接收任何触摸事件。然而,我可以在触摸栏时触摸并滚动页面视图。

在另一个屏幕上我有多个由自定义视图组成的开关,我想避免同时触摸多个开关,所以我也将它们的isExclusiveTouch设置为true,但仍然可以同时触摸其中两个。

我想念isExclusiveTouch根本不起作用吗?

2 个答案:

答案 0 :(得分:2)

  

exclusiveTouch仅在此期间阻止其他视图中的触摸   在独家触摸视图中有活跃的触感。也就是说,如果   你把手指放在独家触摸视图中,触摸将无法启动   在其他视图中,直到你抬起第一根手指。它并没有阻止   如果当前没有触摸,则从其他视图开始触摸   在exclusiveTouch视图中。

     

要真正使此视图成为屏幕上唯一可以接收的   触摸你需要在所有内容之上添加另一个视图   否则抓住其余的触摸,或者在某处继承视图   你的层次结构(或你的UIWindow本身)和覆盖   hitTest:withEvent:在文本视图可见时始终返回文本视图,   或者不为文本视图中的触摸返回nil。

Source

答案 1 :(得分:0)

我可以做这个工作: 我在条形图的前面添加了一个透明视图,并将它的isExclusiveTouch设置为true。

所以我的酒吧现在就像这样

barView -|- subview 1
         |- subview 2
         |- [...]
         |- front view (transparent view for exclusive touch) <- new 
barView上的

isExclusiveTouch不起作用,但在前视图上使用它。

我也可以使用相同的解决方案为我的交换机工作。