为什么UIView的exclusiveTouch属性没有阻塞?

时间:2010-10-15 21:09:03

标签: iphone ipad uiview

我发布了一个简单的UIView textField - 让我们称之为orderSetNameView - 点按一下按钮。我希望将此视图设为模态,但不使用

[UIViewController presentModalViewContoller:animated:]

似乎我可以简单地设置textInputView.exclusiveTouch = YES来实现这一目标。

Apple文档说明了exclusiveTouch

  

一个布尔值,指示接收器是否处理触摸事件   只。如果是,则接收器阻止其他视图   接收触摸事件的窗口;否则,它没有。该   默认值为NO。

我认为“同一窗口”意味着相同的UIWindow,其中我只有一个。

问题在于,当我实例化我的orderSetNameView,将其添加为子视图,并设置exclusiveTouch = YES时,触摸事件会在我的应用的所有其他视图中发生,即其他视图中的触摸事件未按预期阻止

    // ....

    [self.view addSubview:self.orderSetNameView];
    [self.orderSetNameView openWithAnimationForAnimationStyle:kMK_AnimationStyleScaleFromCenter];
}

// Set as modal
self.orderSetNameView.exclusiveTouch = YES;

不应该orderSetNameView阻止所有其他视图中的触摸事件吗?我错过了什么?

2 个答案:

答案 0 :(得分:14)

来自Apple开发者论坛:

  

exclusiveTouch仅在独占触摸视图中有活动触摸的时间内阻止其他视图中的触摸。也就是说,如果您在独家触摸视图中放下手指,则在您抬起第一根手指之前,触摸将无法在其他视图中启动。如果exclusiveTouch视图中当前没有触摸,则不会阻止在其他视图中启动触摸。   

要真正使这个视图成为屏幕上唯一可以接收触摸的内容,您需要在其他所有内容之上添加另一个视图以捕获其余的触摸,或者将视图子类化在您的某个位置层次结构(或您的UIWindow本身)并覆盖hitTest:withEvent:以便在文本视图可见时始终返回文本视图,或者返回nil以用于不在文本视图中的触摸。

答案 1 :(得分:0)

把它放在 AppDelegate 或其他文件中。使用这一次。

// 多点触控禁用

UIView.appearance().isExclusiveTouch = true

UIButton.appearance().isExclusiveTouch = true