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

see*_*r12 8 iphone uiview ipad

我正在按下按钮,启动一个简单UIViewtextField- 让我们称呼它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;
Run Code Online (Sandbox Code Playgroud)

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

see*_*r12 14

来自Apple开发者论坛:

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

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