iOS实现滑动嵌套
上下滑动嵌套
层级
- 底下是一个TableView;
- 红色的是tableView.tableHeaderView;
- 绿色的是- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section方法返回;
- 最底下的是一个自定义ScrollView(因为还要实现左右滑动);
- 里面的是两个自定义的TableView;
View
里面的TableView
- 重写- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer方法,能够透传手势,让最外面的TableView也响应滑动手势。让该方法固定返回YES;
ScrollView和最外层TableView
- 有一个BOOL canScroll,表示当前tableView是否能滑动,默认YES;
- scrollView也有一个sonScroll表示里面的tableView是否能滑动,默认NO;
- 监听scrollViewDidScroll
- 最外层TableView
- 如果滑动超过最上面的tableHeaderView高度,或者不能滑动(canScroll==NO),滑动固定在顶部,canScroll如果是YES就设为NO;
- scrollView
- 如果sonScroll==NO,tableView固定在(0, 0)位置;
- 否则如果滑动距离<=0,sonScroll=NO;
- 注意canScroll和sonScroll是互斥的,一个修改要通知另一个修改,但是要避免死循环;
- 注意不要设置scrollEnable,不然无法完成快滑松手的效果;
- 最外层TableView
左右滑动
- ScrollView里有若干个TableView;
- 主要在scrollView的
- scrollViewWillBeginDragging:让所有tableView.scrollEnabled=NO
- scrollViewDidEndDecelerating:让所有tableView.scrollEnabled=YES
- scrollViewDidEndDragging:让所有tableView.scrollEnabled=YES