私は次のビューの構造を持っています
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;
}