cell里嵌套tableView,需要根据偏移量判断滑动主tableView还是滑动cellTableView,让用户体验感觉是一个整体。
做的过程碰到个问题,就是滑动到最底部,cellTableView无法继续上拉滑动了,下边有解决方法。
粘贴了主要代码,完整逻辑可见demo:https://github.com/zhuzi55/LYCellTableViewDemo.git
SecondViewController.m
#pragma mark - 外部tableview滑动
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
NSLog(@"tableview滑动 == %.2f", scrollView.contentOffset.y);
if (self.tableViewCanScroll == NO) {
self.tableView.contentOffset = CGPointMake(0, kHeaderViewHight);
}
if (self.tableView.contentOffset.y >= kHeaderViewHight) {
// 无表头了
NSLog(@"++++++");
self.cellTableViewCanScroll = YES;
self.tableViewCanScroll = NO;
self.tableView.contentOffset = CGPointMake(0, kHeaderViewHight);
}
}
#pragma mark - cell嵌套列表滑动控制 通过偏移量判断是外部滑动还是内部滑动
-(void)cellTableViewScroll:(UIScrollView *)scrollView{
NSLog(@"cellTableview滑动 == %.2f", scrollView.contentOffset.y);
if (self.cellTableViewCanScroll == NO) {
scrollView.contentOffset = CGPointZero;
}
if (scrollView.contentOffset.y < 0) {
self.cellTableViewCanScroll = NO;
self.tableViewCanScroll = YES;
}
}
-(void)cellTableViewDidEnedScroll:(UIScrollView *)scrollView{
CGFloat maxOffsetY = scrollView.contentSize.height - scrollView.frame.size.height;
if (scrollView.contentOffset.y >= maxOffsetY) {
scrollView.contentOffset = CGPointMake(0, maxOffsetY-1);
}
}
TestTableViewCell.m
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
if ([self.delegate respondsToSelector:@selector(cellTableViewDidEnedScroll:)]) {
[self.delegate cellTableViewDidEnedScroll:scrollView];
}
}
//
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if ([self.delegate respondsToSelector:@selector(cellTableViewScroll:)]) {
[self.delegate cellTableViewScroll:scrollView];
}
}
TestUITableView.m
//** 让手势支持多响应
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}