1:實(shí)現(xiàn)效果scrollview中添加多個(gè)tableView還要實(shí)現(xiàn)左滑刪除功能.如下圖
項(xiàng)目代碼:https://github.com/KylinSpace/TableViewsInTableView.git
一:有的朋友可能會(huì)說(shuō)這很簡(jiǎn)單,把scrollview的權(quán)scrollEnabled屬性設(shè)置為NO就可以了.但是這就意著滾動(dòng)scrollview切換控制器的功能要被砍掉了,用戶體驗(yàn)上就差了那么一點(diǎn)了.
二:本著追求用戶體驗(yàn)的思維,當(dāng)然不能砍掉其中的一個(gè)功能嘍,網(wǎng)上查找了些相關(guān)資料,可并不完美.實(shí)現(xiàn)起來(lái)還是有一些BUG.所以根據(jù)這個(gè)思路自己進(jìn)行了調(diào)整.
實(shí)現(xiàn)方法思路如下:
第一:自定義一個(gè)scrollView 繼承UISrollView
成為手勢(shì)的代理,實(shí)現(xiàn)手勢(shì)識(shí)別的代理方法
@interface KylinScrollView : UIScrollView <UIGestureRecognizerDelegate>
// 該方法實(shí)現(xiàn),如果一個(gè)手勢(shì)沒有被識(shí)別,那么多個(gè)手勢(shì)可以被識(shí)別
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
if (gestureRecognizer.state != 0) {
return YES;
}else{
return NO;
}
}
第二:所以tableView都加入這個(gè)scrollview中為避免多個(gè)手勢(shì)同時(shí)被識(shí)別還需要在主控制器中實(shí)現(xiàn)如下兩個(gè)方法:意思是當(dāng)你開始滾動(dòng)自定義的scrollView時(shí)時(shí)關(guān)閉tableView滾動(dòng),當(dāng)你停止?jié)L動(dòng)動(dòng)scrollView時(shí)開啟tableView的滾動(dòng).以此來(lái)控制手勢(shì)不會(huì)沖突.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ // 第一個(gè)方法
if (scrollView == self.contentView) { // self.contentview就是你自己自定義的scrollView
_oneVc.tableView.scrollEnabled = NO;
_twoVc.tableView.scrollEnabled = NO;
_threeVc.tableView.scrollEnabled = NO;
_fourVc.tableView.scrollEnabled = NO;
}
}
// 滾動(dòng)切換控制器
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ // 第二個(gè)方法
if (scrollView == self.contentView) { ?self.contentview就是你自己自定義的scrollView
_oneVc.tableView.scrollEnabled = YES;
_twoVc.tableView.scrollEnabled = YES;
_threeVc.tableView.scrollEnabled = YES;
_fourVc.tableView.scrollEnabled = YES;
}
}
第三:但實(shí)際上實(shí)現(xiàn)上面兩個(gè)方法后還是會(huì)出現(xiàn)BUG,點(diǎn)擊標(biāo)題欄切換控制后,會(huì)出現(xiàn)tableView無(wú)法滑動(dòng)的情況.那是因?yàn)辄c(diǎn)擊標(biāo)題欄切換控制器不會(huì)執(zhí)行第二個(gè)方法.所以tableView滾動(dòng)屬性沒有被激活;造成不能滾動(dòng);
所以必須在你執(zhí)行標(biāo)題按鈕點(diǎn)擊的那個(gè)方法里面再設(shè)置以下屬性,打開tableView的滾動(dòng)功能
_oneVc.tableView.scrollEnabled = YES;
_twoVc.tableView.scrollEnabled = YES;
_threeVc.tableView.scrollEnabled = YES;
_fourVc.tableView.scrollEnabled = YES;
新浪微博?@火柴大男人