首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将UITableView滚动手势传递给superview UITableView

UITableView是iOS开发中常用的控件,用于展示列表数据。它是UIScrollView的子类,因此具备滚动的功能。在默认情况下,UITableView会处理滚动手势,不会将滚动事件传递给其父视图superview。

如果需要将UITableView的滚动手势传递给superview,可以通过以下步骤实现:

  1. 创建一个自定义的UITableView子类,例如CustomTableView。
  2. 在CustomTableView类中重写touchesShouldCancel(in: UIView)方法,该方法用于确定是否应该取消触摸事件。
  3. 在重写的touchesShouldCancel(in: UIView)方法中,判断如果触摸事件发生在UITableView的滚动区域内,则返回false,表示不取消触摸事件,将滚动手势传递给superview;否则返回true,表示取消触摸事件,UITableView自己处理滚动手势。

以下是一个示例代码:

代码语言:swift
复制
class CustomTableView: UITableView {
    override func touchesShouldCancel(in view: UIView) -> Bool {
        if view.isKind(of: UIScrollView.self) {
            // 判断触摸事件发生在UITableView的滚动区域内
            let touchLocation = convert(view.frame.origin, from: view)
            if bounds.contains(touchLocation) {
                return false
            }
        }
        return true
    }
}

使用CustomTableView替代原来的UITableView,即可实现将UITableView的滚动手势传递给superview。

推荐的腾讯云相关产品:腾讯云移动开发平台(https://cloud.tencent.com/product/mmp

这是一个提供移动应用开发全流程解决方案的产品,包括移动应用开发、测试、发布、运营等环节。可以帮助开发者快速构建和发布移动应用,并提供丰富的移动开发工具和服务。

希望以上信息对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS中runtime的简单用法——动态绑定

void)deleteRow:(UIButton *)button { //方法一 /* SGMyNewsViewTableViewCell *cell = (id)button.superview...[cell isKindOfClass:[SGMyNewsViewTableViewCell class]]) { cell = (id)cell.superview; }...[indexPath] withRowAnimation:YES]; //方法二需要刷新 因为这里做删除处理,数组的count会变化,所以此处必须要刷新方法重新绑定赋值(如果在别的例子中只做传值...OBJC_ASSOCIATION_COPY_NONATOMIC //这个参数有兴趣的可以点进去看看,其实还有其他几个选项,比如当你传字符串的时候这个参数要改为OBJC_ASSOCIATION_RETAIN_NONATOMIC...//我这里要传进来一个indexPath的对象,所以用了COPY。具体他们之间的区别以及用法,直接复制找百度大神吧。 iOS技术交流群:511860085 成堆的技术视频福利,欢迎加入!

1.1K50
  • Ios常用第三方框架(二)

    表相关与Tabbar SWTableViewCell - 国内开源作者,带很多手势的表单元格。 MCSwipeTableViewCell - 带很多手势的表单元格。...LxTabBarController - 改变了原生tabbar切换tab时的生硬效果,并加入滑动切换手势(有和界面上的其它手势发生冲突的风险,可根据具体项目予以关闭),swift版本。...CYLTabBarController - 低耦合集成TabBarController,最低只需传两个数组即可完成主流App框架搭建。...QuickRearrangeTableView - 基于 UITableView 的快速重排功能扩展子类。通过长按选定单元格然后滚动移动到指定位置。...会自动将collection view处理完善,并将用户消息以合适美观的方式显示出来。每个iOS项目都可以自动处理。

    7.7K60

    一个多UITableview的左右滑动简单解决方案

    前言 本文源自实际开发中的需求,核心的要求有几个: 1、多个UITableview要支持左右滑动; 2、点击Tab也要有UITableview的滑动切换效果; 3、每个UITableview单独的下拉刷新和上拉加载...某条.gif 正文 1、核心思路 根据要求来分析,可以采用UIScrollView作为容器,开启pageEnable属性实现左右分页,同时关闭UIScrollView的上下滑动手势(避免和UITableview...self.mContainerScrollView.pagingEnabled = YES; [self.view addSubview:self.mContainerScrollView]; 然后将四个...滑动手势冲突 如果UIScrollView容器的上下滑动手势打开,会存在两个上下滑手势,一般的操作不会触发UIScrollView容器的上下滑动(因为上下滑动优先被内部的UITableView捕获)。...解决办法:contentSize的高度设置为0,关闭vertical的滚动。

    2.8K71

    iOS 无侵入埋点组件总结

    结合AOP的核心思想:将应用程序中的业务逻辑同对其提供支持的通用服务进行分离,最后采用了第2种方案。...UITableView 和 UICollectionView 的树级关系没有到每个具体的 cell,避免产生很多无用的 id,而是将 indexpath 作为描述信息传入。实现逻辑如下图: ?...3.3 分析及实现 3.3.1 需要添加埋点统计的地方 button 相关的点击事件 页面进入、页面推出 tableView 的点击 collectionView 的点击 手势相关事件 3.3.2 分析...对于手势,我们在创建的时候进行 hook,方法为 initWithTarget:action:。 3.3.3 实现原理 用运行时方法替换方法实现无侵入的埋点方法。 实现原理图: ?...tableView、collectionView、手势的点击事件与上述实现方法类似。

    3K31

    拖拽手势和清扫手势冲突时(UIPanGestureRecognizer和UISwipeGestureRecognizer冲突时)

    故事发生在这样的情境上:给整个控制器添加了一个拖拽手势,然后又在控制上的每个Cell上加了左滑清扫手势,然后问题来了:只有拖拽手势起作用,而左滑手势没有效果了,然后怎么解决这个问题呢!...当给整个控制器添加了拖拽手势(UIPanGestureRecognizer),然后在控制器里面的UITableViewCell又添加了左滑清扫手势(UISwipeGestureRecognizer),造成了只有拖拽手势起了作用...,而Cell的左滑手势已经不能滑动了!...:(UITableView *)tableView{ 2 static NSString *reuseIdentity = @"tanCell"; 3 4 TanTableViewCell...,避免手势冲突 10 UIPanGestureRecognizer *panGes = [tableView.superview.gestureRecognizers objectAtIndex

    1.7K20

    IOS开发系列——UIView专题之五:常用开发技巧篇

    5.1.4.1hitTest:withEvent:方法流程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIApplication会从事件队列中取出触摸事件并传递给...key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图...•- (UIViewController*)viewController { •for(UIView* next = [self superview]; next; next = next.superview...rectfromView:(UIView*)view; 例把UITableViewCell中的subview(btn)的frame转换到controllerA中 1// controllerA中有一个UITableView..., UITableView里有多行UITableVieCell,cell上放有一个button 2//在controllerA中实现: 3CGRect rc = [cellconvertRect:cell.btn.frametoView

    1.2K20

    阅读器多种翻页的设计与实现

    ; 4、用户pan手势结束,根据动画完成程度确定是补齐动画还是回退; 5、处理完动画相关,将状态重置为1,接受用户的pan手势; 如果还要支持tap手势,则自动完成一次动画效果,再将状态重置为status_show...通常iOS实现滑动会有两大选择:UIScrollView和UITableView;(UICollectionView和UITableView类似) UIScrollView存在一个较大的局限:上面的视图资源无法回收利用...以下图为例,我们使得UIScrollView的contentSize为(view.width, 3*view.height),偏移contentOffsetY为view.height(初始状态相当于将窗口放置在中间...至此,我们可以不依赖UITableView完成无限视图的滚动,同时避免各类touch事件处理和加速度计算。 ?...A: 这是因为pan手势在切后台时会自动cancel,所以需要在手势处理增加对cancel状态的处理; Q:如果初始化的时候,传进的VC.view不满一屏,该如何处理?

    3.4K10

    UITableView性能优化-中级篇

    进阶篇 最近遇到一个需求,对tableView有中级优化需求 要求 tableView 滚动的时候,滚动到哪行,哪行的图片才加载并显示,滚动过程中图片不加载显示; 页面跳转的时候,取消当前页面的图片加载请求...runloopDemo.gif 效果如上 滚动的时候不加载图片,滚动结束加载图片-满足 滚动结束,之前滚动过程中的cell会加载图片 => 不满足需求 版本回滚到Runloop之前 - git reset...ImageDownload - (void)cancelLoadImage{ [_task cancel]; } @end 思路: 创建一个可变字典,以indexPath:manager的格式,将当前的图片下载操作存起来...每次下载之前,将当前下载线程存入,下载成功后,将该线程移除 在viewWillDisappear的时候,取出当前线程字典中的所有线程对象,遍历进行cancel操作,完成需求 话外篇:面试题赠送 最近网上各种互联网公司裁员信息铺天盖地...-)iOS本来就是提前进入寒冬,iOS小白们可以尝试思考下这个问题 问:UITableView的圆角性能优化如何实现 答: 让服务器直接传圆角图片; 贝塞尔切割控件layer; YYWebImage为例

    1.6K20

    iOS 中的事件响应

    从上图中我们可以看出:Window 在将事件传递给最佳响应者的同时,也会将事件传递给相关的手势识别器并由手势识别器优先识别。...当倒计时结束前,如果用户的手指发生了移动,直接滚动内容视图,不会将该事件传递给对应的子视图; 当倒计时结束时,如果用户的手指位置没有改变,则调用自身的 -touchesShouldBegin:withEvent...:inContentView:方法询问是否将事件传递给对应的子视图 (如果返回 NO, 则该事件不会传递给对应的子视图,如果返回 YES,则该事件会传递给对应的子视图,默认为 YES); 当事件被传递给子视图后...,即滚动视图不会再滚动。...open var canCancelContentTouches: Bool // 在UIScrollView的子类中重写该方法,用于返回是否将事件传递给对应的子视图,默认返回YES,如果返回NO,该事件不会传递给对应的子视图

    2.8K11

    iOS流水布局UICollectionView简单使用引实现结

    如果熟悉UITableView的话,其实很多地方都是类似的,甚至可以说UITableView是一种特殊的UICollectionView,正如正方形是一种特殊的矩形一样,UITableView就是一种每行只放一个方块的...NSTextAlignmentCenter; [self.contentView addSubview:self.label]; } return self; } 我们将图片和...不同之处在于UICollectionView需要一个布局参数来决定cell是如何布局的,默认是流水布局,也就是我们最常见的形式,也就是上面图里的形式;此外,UICollectionView除了垂直滚动,...collectionView.delegate = self; collectionView.dataSource = self; [self.view addSubview:collectionView]; } 既然我们将delegate...代码中注释了一行,就是用来设置滚动方向为水平的,效果如下: 同样的内容,滚动方式变化后,呈现的效果也会变化。

    1.1K00

    iOS开发中行高灵活可变的UITableView的性能优化

    至于为何UITableView在进行配置时也需要拉取所有的行高数据,我猜想其为了进行视图的一些初始化操作,例如表视图右侧滚动条的宽度和所占比例等。...二、对UITableView可变行高的计算方式进行优化         通过前面的分析,可以理解如果将复杂的计算代码写在heightForRowAtIndexPath方法中,代价将是非常惨重的。...我个人更倾向将行高数据封装进cell的数据模型Model中。         通过优化,可以有效的减少重复的高度计算,这也是我原先处理此类问题的主要方式。...关于细节方面,还有一个问题需要注意,预估的行高会影响到TableView右侧滚动条的展现,如果每个cell行高跳跃跨度十分大,滚动条宽度的配置会失准,随着用户滑动表视图,右侧滚动条可能会出现长短跳跃的情况...,如果开发者需要精准这个滚动条的配置,可以在如下代理方法中返回具体cell的估计行高。

    2K20

    跟iOS UI的捉迷藏(如何获取用户点击行为的控件title)

    根据上文可知,当UIControl监听到需要处理的交互事件时,会调用 sendAction:to:forEvent: 将target、action以及event对象发送给全局应用,Application...响应的uiview是UIButton,即用户点击的是按钮,则立马获取(即一阶获取) NSString * title = [[button titleLabel] text]; 下面加大难度,获取UITableView...的cell内容 二阶获取的控件:UITableView的cell 通过上面的方法,当用户点击了红色字体的内容后,响应的view是UITableViewCellContentView 这个方法与UITableView...的关系如下: 这里有两种方法,一种是获取UITableViewCellContentView的subview,再获取label的text,也可以获取UITableViewCellContentView的superview...,通过[[uitableview textLabel] text]方法获得,拐了一个弯,需要父view或子view,即二阶获取 二阶获取的控件:UITabBar UITabBar也是一个常用的布局 层级关系如下

    1.4K10

    列表滑动展开隐藏头部HeaderView

    对于按钮移动的动画就没有去花时间还原了,毕竟这里主要是为了实现滚动压缩、展开Header,动画不讨论。 ? 实现思路 如图所示: ?...首先在要将该界面分成两部分:一个ScrollHeader,一个UITableView。 ScrollHeader占据屏幕上方,高度为展开后的高度 UITableView占据整个屏幕,这样可以完全滚动。...之后将ScrollHeader分成两部分:topView和bottomView。...topView 即为压缩后的布局 bottomView 即为展开后的布局 我这里采取将topView固定在ScrollHeader的顶部,覆盖在bottomView上方,根据滑动对其淡入淡出。...实现方法 首先按照前面的设计将界面布局好,之后的重点是为ScrollHeader增加滑动效果。

    3.4K20

    高效学习iOS —— Stroke和路径动画

    这是要完成的动画: 先添加需要的代码,这里需要将storyboard的ViewController换成 TableViewController,将Under Top Bars 和 Under Bottom...tableView.deselectRow(at: indexPath, animated: true) } } (滑动显示更多) 然后创建一个文件,创建一个MyRefreshView类并且init需要传进来...viewController里面重写scrollViewDidScroll 和 scrollViewWillEndDragging方法,然后在里面相对应调用refreshView里面的方法,并且把参数传进去...这里需要根据滚动的高度来进行判断进度,先声明一个progress的CGFloat属性。...var progress: CGFloat = 0.0 在scrollViewDidScroll 里面算出向上滚动的高度,然后处理本身view的大小和1比较取最小值,然后根据得到的progress设置

    1.9K20
    领券