我有一个表格视图,我正在使用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的子视图,以及单元格,注册触摸。
答案 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;如果你想要更多的细节,可以对系统的工作方式有一些很好的答案。