0

我正在使用 iOS SDK 6 和 7。我有一个 UIToolbar 覆盖另一个视图(称为“视图 B”),它具有touches*用于处理点击的消息处理程序。当然,工具栏充满了 UIBarButtonItems。当启用工具栏按钮项目时,当我点击它或拖动它时,视图 B 不会收到任何触摸消息,这就是所需的效果。但是当一个按钮项被禁用时,点击或拖动它会向下“通过”工具栏(实际上)向下方的视图 B 发送一条消息。

如何确保工具栏上的点击不会传递到底层视图,即使点击发生在禁用的栏按钮项目上?

4

2 回答 2

1

我仍然觉得这是一种相当不直观的行为,但解决方法相当简单。例如,touchesBegan 事件传递一个touchesNSSet,通常用于考虑要处理什么触摸。这里的问题是底层视图将接收一组触摸,其中包括不属于它的触摸并且它不应该处理。因此,而不是:

- (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”本身相关的触摸。

于 2013-09-23T18:28:43.597 回答
0

如果您已经在视图 B 中手动处理触摸事件,只需检查触摸事件的点击点是否在禁用按钮的框架内。如果是这样,请忽略它。

于 2013-09-23T18:22:18.327 回答