OC ScrollView里面含有拖动的TableView 如何响应拖动的手势
Posted jmarshall
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC ScrollView里面含有拖动的TableView 如何响应拖动的手势相关的知识,希望对你有一定的参考价值。
参考闲鱼的主页面,上半部分的View和下半部分的TableView:
首先拿到设计的UI控件:
@property (weak, nonatomic) IBOutlet UIScrollView *ContentScrollView;//外部的套用ScrollView @property (weak, nonatomic) IBOutlet UITableView *DocterInfoTable;//这是ScrollView内部的TableView @property (weak, nonatomic) IBOutlet UIStackView *DoctorTableStack;//这是想要ScrollView停留的点
我们需要给ContentScrollView一个新的Controller来响应多个手势,在.m文件中实现协议UIGestureRecognizerDelegate:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer return YES;
然后在主界面里面实现<,UITableViewDelegate,UITableViewDataSource,UIScrollViewDelegate>协议:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView //NSLog(@"%@,%f",scrollView.class,CGRectGetMinY(_DoctorTableStack.frame) - _ContentScrollView.contentOffset.y); //NSLog(@"%@",NSStringFromCGRect(_DoctorTableStack.frame)); if (CGRectGetMinY(_DoctorTableStack.frame) <= _ContentScrollView.contentOffset.y) NSLog(@"禁止_ContentScrollView滑动"); _ContentScrollView.contentOffset = CGPointMake(0, CGRectGetMinY(_DoctorTableStack.frame)); if (_DocterInfoTable.contentOffset.y > 20) doctorViewPull = true; else doctorViewPull = false; if (CGRectGetMinY(_DoctorTableStack.frame) >_ContentScrollView.contentOffset.y) NSLog(@"不行_DocterInfoTable滑动"); if (!doctorViewPull) _DocterInfoTable.contentOffset = CGPointZero; else _ContentScrollView.contentOffset = CGPointMake(0, CGRectGetMinY(_DoctorTableStack.frame));
首先contentoffset的值会瞬间大于50都有可能。所以依靠contentoffset可能会导致边界值的误差判断出问题!!!
1._ContentScrollView.contentOffset.y代表的是咱们ScollView的偏移量,当他小于我们设定的位置的顶部的时候,我们不允许TableView进行偏移,也就是将其偏移量设置为CGPointZero。这样视觉上就是ScrollView在移动儿TableView并没有移动。
2.当_ContentScrollView.contentOffset.y一旦大于设定值的时候,禁止其再滑动,设置他的值永远停留在该设定值。但是当我们向上突然拉一下的时候ScrollView和TableView都会有contentoffset,于是会有可能进入第二个分支,也就是“不行_DocterInfoTablehu滑动”。于是我们就需要一个Flag来表示我的TableView进入了pan状态,你Scrollview就不要响应,你尽管会进入这个分支但是你的值依然是当前位置,我们的设定值。直到TableView的contentoffset变得足够小,这里我设置20作为参考,代表我开始响应pan状态。(也可以将设置为1更接近完美)
重点就是:当我的ScrollView滑到特定值的时候需要一个状态标志,ScrollView不再变化,TableView响应pan手势。我的TableView放弃响应pan手势的时机就是我的TableView的contentoffset的值至少大于0.1,也就是滑动到顶部。这就是两者的switch button
以上是关于OC ScrollView里面含有拖动的TableView 如何响应拖动的手势的主要内容,如果未能解决你的问题,请参考以下文章
请问android编程中,textview里面放了很多文字,怎样拖动textview让下面的内容显示出来。
NSMutableDictionary的用法,oc怎么构建一个对象