2017-01-13 18 views
0

私はあるイベントビューからUITableViewにイベントを転送しようとしています。しかし、私は問題に遭遇しました。図において慣性スクロールを生成するために、UITableViewへの前方へのタッチイベント

prototype app to illustrate problem

問題を説明するためのプロトタイプ図です。下半分の白い部分は通常のUITableViewです。黄色の表示はUIViewで、hitTest:withEvent:を使用してUITableViewの中央にタッチします。赤色の表示はUIButtonです。

目標は、上下のパンニングタッチを黄色のビューから下部のUITableViewに転送することです。しかし、赤色のタップはUIButtonです。

私は2つの主なアプローチを試みましたが、どちらも問題があります。

最初の方法は、UITableViewcontentOffsetを設定するために使用できる黄色の図にUIPanGestureRecognizerを追加することです。問題は、このアプローチではテーブルビューの慣性スクロールが機能しないことです。

黄色の表示でhitTest:withEvent:を使用してタッチを転送する方法があります。

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    if([self.button_red pointInside: [self convertPoint:point toView:self.button_red] withEvent:event]) { 
     return self.button_red; 
    } else { 
     return [self.view_table hitTest:CGPointMake(self.view_table.width/2.0,self.view_table.height/2.0) withEvent:event]; 
    } 
} 

hitTest:withEvent:は、黄色の表示でタッチが開始されたときにのみ呼び出されます。つまり、赤いビューでドラッグが開始されるたびに、ドラッグをテーブルビューに転送しません。それで十分ではありません。

黄色の表示からUITableViewにパンのジェスチャーを転送することは可能ですか?赤いボタンを押したままにする方法と、赤いボタンでドラッグを開始する方法がありますか?これを何とかするには、黄色の表示でtouch event methodsを無効にする必要がありますか?慣性スクロールを維持しながらこれを行う方法はありますか?

+1

UITableViewでtableHeaderViewとしてyellowViewを設定できませんか? –

+0

これは良い考えですが、refreshControlは画面の上部に表示されます。私は、黄色のビューの下にrefreshControlを保持したいと思います。 –

+1

私たちが何かを試してみたら、refreshControlも上に終わりますか? [tableView addSubview:yellowView]; [tableView setContentInset:CGPointMake(0、CGRectGetHeight(yellowView.frame))]; –

答えて

1
  1. UITableViewの中にサブビューとしてyellowViewを追加する必要があります。
  2. また、yellowViewの高さに対応する には、contentInsetの世話をする必要があります。
  3. デフォルトでは、この上にセルが表示され、yellowViewが追加されました。これを修正するには が必要です。黄色の表示でzPositionを調整します。

    CGFloat height = CGRectGetHeight(yellowView.frame); 
    
    // fix yellowView's y position 
    yellowView.frame = CGRectMake(0, -height, CGRectGetWidth(yellowView.frame), height); 
    
    [tableView addSubview:yellowView]; 
    yellowView.layer.zPosition = 10; // make it appear over cells 
    
    [tableView setContentInset:UIEdgeInsetsMake(height, 0, 0, 0)]; 
    

この情報がお役に立てば幸いです。

+0

パーフェクト!私は、zPositionが必要かどうかは分かりませんが、意味があります。 –

関連する問題