3

私は次のビューの構造を持っています

UIView(1)
   |--> UIScrollView
        |-----------> UIView(2)
                        |------> UIButton

UIView(1)のhitTestは、次のようにオーバーライドされています。

- (UIView *)hitTest:(CGPoint) point withEvent:(UIEvent *)event
{
    /* this view should have only view only: the scroll view */
    UIView * vv = [[self subviews] objectAtIndex:0];

    if ([vv pointInside:point withEvent:event])
    {
        UIView *rv = [vv hitTest:point withEvent:event];
        return rv;
    }

    if ([self pointInside:point withEvent:event])
    {
        return vv;
    }
    return nil;
}

これは、スクロールビュー自体の外側にドラッグされているUIScrollViewをキャッチするために必要です。

問題は、UIButtonがクリックされたときに、それに接続されているイベントが発生しないことです。hitTestから返されるビューはUIView(2)です。

クリックイベントに応答するようにUIButtonを作成するにはどうすればよいですか?

編集ムンディ の提案の後、私はhitTestを以下と交換しました、そしてそれは動作します。もちろん、[super hitTest:]を呼び出すのを忘れました。

- (UIView *)hitTest:(CGPoint) point withEvent:(UIEvent *)event
{
    /* this view should have only view only: the scroll view */
    UIView * scrv = [self findScrollView];

    UIView *superView = [super hitTest:point withEvent:event];
    if (superView == self)
    {
        return scrv;
    }

    return superView;
}
4

1 に答える 1

3

[super hitTest:point withEvent:event]適切な場所に電話してみてはどうでしょうか。

于 2012-06-07T12:40:47.750 に答える