解決問題:
UICollectionView下嵌套UITableView作為多個(gè)列表時(shí)側(cè)滑返回失效及cell側(cè)滑刪除失效的問題
繼承自UICollectionView:
@implementation XYCollectionView
// 是否允許同時(shí)支持多個(gè)手勢妄讯,默認(rèn)是不支持多個(gè)手勢
// 返回yes表示支持多個(gè)手勢
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (gestureRecognizer.view == self) {
if (self.contentOffset.x <= 0 && gestureRecognizer.state != UIGestureRecognizerStatePossible) {
return YES;
}
}
return NO;
}
// 每次觸摸屏幕時(shí)保證collectionView第一時(shí)間可以響應(yīng)滾動
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
self.scrollEnabled = YES;
return [super hitTest:point withEvent:event];
}
@end
設(shè)置下面這個(gè)是為了觸發(fā)側(cè)滑返回時(shí)collectionView不再去滾動cell身堡, 在CollectionView的代理方法中休玩,根據(jù)collectionView的contentOffse讓其是否可以滾動
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
UIPanGestureRecognizer *pan = (UICollectionView *)scrollView.panGestureRecognizer
if (pan.view == scrollView) {
if (_switchState == 0 && _downloadingArr.count > 0) {
for (NSInteger i = 0; i < _downloadingArr.count; ++i) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
// 此處是為了解決cell左滑刪除失效的問題
if (cell && [cell isKindOfClass:[DownloadingCell class]]) {
CGPoint location = [pan locationInView: scrollView];
if (location.y > 0 && location.y < cell.frame.size.height*(i+1)) {
scrollView.scrollEnabled = NO;
}
}
}
}
// 此處是為了解決滑動到第一個(gè)cell左側(cè)邊緣時(shí)側(cè)滑返回失效問題
if (scrollView .contentOffset.x < 0) {
scrollView.scrollEnabled = NO;
} else {
scrollView.scrollEnabled = YES;
}
}
}
最終效果:每次又滑到第一個(gè)cell邊緣時(shí),就會觸發(fā)側(cè)滑返回