2017-01-13 4 views
0

한 번의보기에서 이벤트를 UITableView으로 전달하려고했습니다. 하지만 문제가 생겼습니다. 도면에서 관성 스크롤을 생성하기 위해 UITableView로 이벤트 전달

prototype app to illustrate problem

문제를 설명하기 위해 원형이다. 아래쪽 절반의 흰색보기는 보통 UITableView입니다. 노란색보기는 을 사용하여 UITableView의 중간에 전달하는 UIView입니다. 빨간색보기는 UIButton입니다.

목표는 노란색보기에서 아래쪽의 UITableView까지 위쪽 및 아래쪽 패닝 터치를 전달하는 것입니다. 그러나 빨간색 UIButton을 두드리는 것은 계속 작동합니다.

나는 두 가지 주요 접근 방식 모두에 문제가 있습니다.

첫 번째 방법은 의 contentOffset을 설정하는 데 사용할 수있는 노란색보기에 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이 필요한지 확실하지 않지만 의미가 있습니다. –

관련 문제