我正在使用 iOS SDK 6 和 7。我有一个 UIToolbar 覆盖另一个视图(称为“视图 B”),它具有touches*
用于处理点击的消息处理程序。当然,工具栏充满了 UIBarButtonItems。当启用工具栏按钮项目时,当我点击它或拖动它时,视图 B 不会收到任何触摸消息,这就是所需的效果。但是当一个按钮项被禁用时,点击或拖动它会向下“通过”工具栏(实际上)向下方的视图 B 发送一条消息。
如何确保工具栏上的点击不会传递到底层视图,即使点击发生在禁用的栏按钮项目上?
我正在使用 iOS SDK 6 和 7。我有一个 UIToolbar 覆盖另一个视图(称为“视图 B”),它具有touches*
用于处理点击的消息处理程序。当然,工具栏充满了 UIBarButtonItems。当启用工具栏按钮项目时,当我点击它或拖动它时,视图 B 不会收到任何触摸消息,这就是所需的效果。但是当一个按钮项被禁用时,点击或拖动它会向下“通过”工具栏(实际上)向下方的视图 B 发送一条消息。
如何确保工具栏上的点击不会传递到底层视图,即使点击发生在禁用的栏按钮项目上?
我仍然觉得这是一种相当不直观的行为,但解决方法相当简单。例如,touchesBegan 事件传递一个touches
NSSet,通常用于考虑要处理什么触摸。这里的问题是底层视图将接收一组触摸,其中包括不属于它的触摸并且它不应该处理。因此,而不是:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch* touch in touches)
{
...
}
}
...利用...
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSSet* myTouches = [event touchesForView: self];
for (UITouch* touch in myTouches)
{
...
}
}
...因此忽略 SDK 提供的触摸并仅使用与“视图 B”本身相关的触摸。
如果您已经在视图 B 中手动处理触摸事件,只需检查触摸事件的点击点是否在禁用按钮的框架内。如果是这样,请忽略它。