我发布了一个简单的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
阻止所有其他视图中的触摸事件吗?我错过了什么?
答案 0 :(得分:14)
来自Apple开发者论坛:
exclusiveTouch仅在独占触摸视图中有活动触摸的时间内阻止其他视图中的触摸。也就是说,如果您在独家触摸视图中放下手指,则在您抬起第一根手指之前,触摸将无法在其他视图中启动。如果exclusiveTouch视图中当前没有触摸,则不会阻止在其他视图中启动触摸。
要真正使这个视图成为屏幕上唯一可以接收触摸的内容,您需要在其他所有内容之上添加另一个视图以捕获其余的触摸,或者将视图子类化在您的某个位置层次结构(或您的UIWindow本身)并覆盖hitTest:withEvent:以便在文本视图可见时始终返回文本视图,或者返回nil以用于不在文本视图中的触摸。
答案 1 :(得分:0)
把它放在 AppDelegate 或其他文件中。使用这一次。
// 多点触控禁用
UIView.appearance().isExclusiveTouch = true
UIButton.appearance().isExclusiveTouch = true