当contentOffset设置为负值时,在tableview上无法识别触摸

时间:2014-11-18 04:43:58

标签: ios objective-c uitableview uiscrollview

我有一个表格视图,我正在使用addSubview:将子视图直接添加到表格视图中。我在位置CGRectMake(0.0f, -30.0f, tableView.frame.size.width, 30.0f)显示此视图(因此当用户滚动略微超出滚动区域的边界时,这将显示在表格的可滚动区域上方)。然后我这样做:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
    if(scrollView.contentInset.top + scrollView.contentOffset.y < -30.0f) {
        [scrollView setContentOffset:CGPointMake(1.0f, -30.0f)-scrollView.contentInset.top animated:NO];
    }
}

因此,当用户向上滚动并进入表格视图中的负空间时,当他们发布时,他们仍然可以看到我在y = -30处插入的视图,以便表格不会&#34;快速返回& #34;到0。

这一切都与我想要的完全一样。但是,当表格contentOffset设置为负y值(例如[scrollView setContentOffset:CGPointMake(1.0f, -30.0f)-scrollView.contentInset.top animated:NO])时,我的表格的两个单元格都没有识别出触摸,也没有直接插入到表格中的视图表。我想知道如何将contentOffset设置为这样的值,并且仍然有我的tableView的子视图,以及单元格,注册触摸。

1 个答案:

答案 0 :(得分:1)

30.0f添加到contentInset.top可能更容易,这样您就可以继续使用股票表视图了。

如果您仍想使用您概述的方法,则需要覆盖hitTest:withEvent:子类中的UITableView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (CGRectContainsPoint(self.theViewInQuestion.frame, point)) {
        return self.theViewInQuestion;
    }

    return [super hitTest:point withEvent:event];
}

默认情况下,iOS视图不会响应其边界之外的触摸,因此代码所做的是告诉事件处理系统您认为theViewInQuestion在表内,即使它位于表的上方起源和界限。

&#34; Event handling for iOS - how hitTest:withEvent: and pointInside:withEvent: are related?&#34;如果你想要更多的细节,可以对系统的工作方式有一些很好的答案。