深圳網(wǎng)站建設(shè)公司招聘b2b網(wǎng)站排名
我們有這樣一個(gè)場(chǎng)景,就是頁(yè)面上有一個(gè)大的tableView,
每一個(gè)cell都是和屏幕一樣高的,然后cell中還有一個(gè)可以
tableView,比如直播間的情形,這個(gè)時(shí)候如果我們拖動(dòng)
cell里面的tableView滾動(dòng)的話,如果滾動(dòng)到內(nèi)部tableView的邊緣,會(huì)帶動(dòng)外層的tableView滾動(dòng),效果如下
這是iOS ScrollView嵌套使用時(shí)候自帶的一個(gè)機(jī)制,但是這個(gè)效果是我們不想要的,我們想要的效果是我們滾動(dòng)cell里面的tableView的時(shí)候,滾動(dòng)到邊緣,不會(huì)帶動(dòng)外層的tableView滾動(dòng)
經(jīng)過(guò)調(diào)試,發(fā)現(xiàn),我們拖動(dòng)cell中的tableView的時(shí)候,
如果該tableView 已經(jīng)滾動(dòng)到邊緣了,則cell中的tableView不會(huì)滾動(dòng),系統(tǒng)會(huì)自動(dòng)處理,會(huì)執(zhí)行外部的滾動(dòng),這個(gè)時(shí)候是沒(méi)有問(wèn)題的,符合我們的需求,
還有一種情況是需要我們處理的,就是當(dāng)我們滾動(dòng)
cell里面的tableView (a)的時(shí)候,cell里面的tableView沒(méi)有滾動(dòng)到邊緣,這個(gè)時(shí)候,當(dāng)該a 滾動(dòng)到邊緣,就會(huì)帶動(dòng)
外層的tableView滾動(dòng),這是我們不想要的,
我們可以這樣處理,自定義一個(gè)tableView, 重寫(xiě)
gestureRecognizerShouldBegin 方法,在該方法里面,
將外層tableView設(shè)置為不可滾動(dòng)
即,
這里要知道一個(gè)機(jī)制,就是,如果我們開(kāi)始拖動(dòng)的時(shí)候,a已經(jīng)滾動(dòng)到邊緣了,則他的 gestureRecognizerShouldBegin
不會(huì)調(diào)用
@interface LBConfictTableView () <UIGestureRecognizerDelegate>@end@implementation LBConfictTableView- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{NSLog(@"哈哈哈哈哈哈內(nèi)層的開(kāi)始方法內(nèi)層的開(kāi)始方法");self.bigTableView.scrollEnabled = NO;return YES;
}@end
然后在停止?jié)L動(dòng)的時(shí)候,將外層tableView設(shè)置為可以滾動(dòng)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{self.tableView.bigTableView.scrollEnabled = YES;
}
看效果圖