iOS tableView添加手势冲突解决办法

iOS tableView添加手势冲突解决办法,第1张

1、在tableView上添加手势,并设置手势代理为当前控制器

2、利用代理方法- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 允许tableView上响应多手势

3、利用代理方法- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer,控制添加的手势是否响应

通常在tableView上添加手势,会有冲突,比如在tableView上添加pan手势,就会让tableView的无法滚动,在tableViewCell上添加tap手势,就会让tableViewCell的didSelectCell方法无法响应等等,利用代理方法 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 虽然能让添加的手势和原来的事件都响应,但是会造成一次性响应多个事件,这时候就需要用代理方法gestureRecognizerShouldBegin:来控制,添加的手势是否需要响应,并且不会阻断事件传递,这样就能很好的解决冲突问题。

tableView 需要实现类似微信我的页面, tableView 的每个section的 cell ,第一个上部分加圆角,中间不加,最后一个加下圆角。具体效果如下:

也许你会想到

注意⚠️: iOS14 系统 cell 不能上面方法设置圆角

通过图明显我们能够看出来这并不能满足我们需求,就是需要每个分区的第一个 cell 的左上角跟右上角有圆角,中间cell没有圆角,最后一个 cell 的左下角跟右下角有圆角。

也许你会在 cell 中加个背景视图,然后通过它来实现圆角。

注意⚠️: 通过这种方法实现的,如果是死数据,能够正常显示,但是如果通过网络请求或者有延迟刷新时,你会发现会出现闪屏或者不显示效果,所以这种不理想。

我们可以通过 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 代理方法来实现,这种方法我们需要把 cell 的背景色设置成透明色,然后自定义一个 view 来作为背景视图。

注意⚠️: 通过上述方法添加圆角后,能够正常显示,如果点击 cell 时还是出现 cell 方形效果,这样选中效果不理想。

解决办法: 需要选中状态的话,还需要再自定义一个 UIView 做为 cell 的 selectedBackgroundView ,继续加在 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 代理方法的最后面。

一个ScrollView里面有多个TableView,如何让所有TableView都具备刷新功能?添加方法和情况如下:

//TableView

for (int i = 0i <_channelNameArr.counti ++) {

_tableView

= [[UITableView alloc] initWithFrame:CGRectMake(SCREEN_WIDTH*i, 0,

SCREEN_WIDTH, _newsScrollView.frame.size.height)

style:UITableViewStylePlain]

_tableView.delegate = self

_tableView.dataSource = self

[_newsScrollView addSubview:_tableView]

_tableView.tag = i + 1

}

//只有第一个TableView有刷新功能

for (int i = 1i <= _tableViewTagi ++) {

UITableView * tableView = (UITableView *)[_newsScrollView viewWithTag:i]

_headerRefresh = [[MJRefreshHeaderView alloc] initWithScrollView:tableView]

_headerRefresh.delegate = self

}

//只有最后一个TableView有刷新功能

_headerRefresh = [[MJRefreshHeaderView alloc] initWithScrollView:_tableView]

_headerRefresh.delegate = self


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/10982820.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存