uiscrollview 不会取消 uisegmentedcontrol 的内容触摸

2024-01-11

我已经对 UIScrollView 进行了子类化,并按以下方式重写了 TouchesShouldCancelInContentView: 方法:

-(BOOL)touchesShouldCancelInContentView:(UIView *)view

{
    if ([view isKindOfClass:[UIButton class]] || [view isKindOfClass:[UISegmentedControl class]]) {
        return YES;
    }

    if ([view isKindOfClass:[UIControl class]]) {
        return NO;
    }

    return YES;
}

它非常适合 UIButton,但不适用于 UISegmentedControl。任何帮助,将不胜感激


终于想通了。必须对 UISegmentedControl 和 UIScrollView 进行子类化。

1.) 为 UISegmentedControl 添加了一个新属性:

@property (nonatomic, assign) BOOL touchProcessed;

2.) 重载了 UISegmentedControl 的以下方法:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (touchProcessed) {
        [super touchesBegan:touches withEvent:event];
    }
    else {
        [self.nextResponder touchesBegan:touches withEvent:event];
    }
    self.touchProcessed = NO;
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.nextResponder touchesMoved:touches withEvent:event];
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.nextResponder touchesEnded:touches withEvent:event];
}

3.) 重载了 UIScrollview 的以下方法:

-(BOOL)touchesShouldCancelInContentView:(UIView *)view
{ 
    if ([view isKindOfClass:[self class]])
    {
        return YES; //if there are two nested custom scrollviews  
    }

    if ([view isKindOfClass:[UIButton class]] || [view isKindOfClass:[CustomSegmentedControl class]] || [[view superview] isKindOfClass:[CustomSegmentedControl class]]) {
        return YES;
    }

    if ([view isKindOfClass:[UIControl class]]) {
        return NO;
    }

    return YES;
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!self.dragging) {
        for (UIView *sv in self.subviews) {
            if ([sv isKindOfClass:[CustomSegmentedControl class]])
            {   //if there is more than one add a tag or tomething
                [(CustomSegmentedControl *)sv setTouchProcessed:YES];
                [sv touchesBegan:touches withEvent:event];
                return;
             }
        }
    }
}

完美运作!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uiscrollview 不会取消 uisegmentedcontrol 的内容触摸 的相关文章

随机推荐

  • 如何使用包内 Excel 文件第一行中指定的列名称?

    谁能告诉我如何更改默认列名称 F1 F2 F3等 将数据从 Excel 源导入到 SSIS 2005 中的 OLEDB 目标时 示例 我的 Excel 电子表格中的数据如下所示 Title ProvinceID DistrictID Con
  • 调试 Windows 服务的更简单方法

    有没有比通过 Windows 服务控制管理器启动服务然后将调试器附加到线程更简单的方法来逐步执行代码 这有点麻烦 我想知道是否有更直接的方法 如果我想快速调试服务 我只需添加一个Debugger Break 在那里 当到达该线时 它会将我带
  • 如何使用ffmpeg的sws_scale()调整图片大小?

    我想使用 ffmpeg 的 func gt sws scale 来调整图片大小 有谁知道该怎么做吗 有这个函数的源码吗 首先你需要创建一个SwsContext 您只需执行一次 struct SwsContext resize resize
  • 暂停新的 BackGroundWorker 直到前一个完成

    我正在努力解决线程问题 问题是当我迭代 foreach 循环时 设置时this Document 应用程序执行登录 这是由事件触发的 需要几秒钟才能完成 在里面worker RunWorkerCompleted方法 我需要执行一些取决于当前
  • 如何在 SQLAlchemy 列/外键混合中指定 PostgreSQL 架构?

    现有的 PostgreSQL 数据库具有以不同 模式 组织的表 以分割大型数据库 既用于扩展 又在服务器级别实现微调的安全性 同样 declarative base 表描述被组织在包中的不同文件中 每个模式一个文件 package init
  • 类似 IOS 7 天气 APP 的过渡/动画

    我想实现iOS天气应用程序 如转换 ListView 点击列表项它会展开到详细视图 或者捏合列表也会展开到详细视图 左右滑动过渡 请让我知道如何实施 提前致谢 Here is 我在博客上找到的一些帖子 http www teehanlax
  • 如何使用scrapy将多个页面的数据收集到单个数据结构中

    我正在尝试从站点中抓取数据 数据被构造为多个对象 每个对象都有一组数据 例如 人员的姓名 年龄和职业 我的问题是这些数据在网站中分为两个级别 例如 第一页是姓名和年龄的列表 其中包含指向每个人的个人资料页面的链接 他们的个人资料页面列出了他
  • 如何知道 Visual Studio 中定义某个宏的位置

    我目前有一个使用 DirectX 的视觉工作室项目 代码中有一些宏 例如 range 0 m lBatchSize LONG m nBatched field ecount opt m lBatchSize IMediaSample m p
  • C++ 概念复合了需求和返回类型需求

    上次我将 C 概念与 GCC 和 fconcepts 标志一起使用时 以下代码片段曾经起作用 template
  • 从 MATLAB 中的文件读取图像

    我的计算机上的图像文件夹中有 bmp 图像 我把它命名为1 bmp to 100 bmp 我想像这样阅读这些图像 for i 1 100 s C images i bmp A imread s end 但是Matlab报错了 我怎样才能实现
  • java中hashcode方法的用途是什么? [复制]

    这个问题在这里已经有答案了 当我们有equals compareTo 方法 为什么有一个hashcode Java 中的方法 如果我们使用HashTable我们必须重写hashcode 方法 除了快速访问随机密钥之外还有什么特殊原因吗 如果
  • 自动布局:什么创建名为 UIView-Encapsulated-Layout-Width & Height 的约束?

    我的布局约束在 Interface Builder 中很好 但由于框架的某些部分应用了我真正不想要的固定高度和宽度约束 因此在运行时发生异常 它们为何存在以及如何将其关闭 它们是记录列表中显示的最后两个约束 2014 04 26 09 02
  • MASM 汇编中的“功能级链接”(即 COMDAT 生成)?

    有没有办法让 MASM 为函数生成 COMDAT 以便链接器删除未使用的函数 即我正在寻找相当于 Gy对于 MASM 并不简单 但可行 讨论过here http www asmcommunity net forums topic id 99
  • PHP 使用一个数组作为多维数组的子数组的键

    所以我得到了一个一维数组 例如 Array 0 gt md5 1 gt name 2 gt description 3 gt url 和一个多维数组 Array 0 gt Array 0 gt md5 1 1 gt name1 2 gt d
  • Angular2 RC5 跨模块提供程序/扫描

    我正在开发一个目前最新的 Angular RC5 和 Material Design 项目 并不是说最后一部分是相关的 由于显而易见的原因 我开始创建单独的模块并不再将所有内容都放在主模块中 然而 我需要拥有在所有模块之间共享的提供程序 F
  • 在 iOS 中按需启用和禁用键盘返回键

    我有一个 UITextField 当用户打字时 我正在使用 BOOL textField UITextField textField shouldChangeCharactersInRange NSRange range replaceme
  • 使用 Swift 在 UIPageViewController 子视图之间传递数据

    我似乎无法找到解决我的直接困境的具体答案 我有一个UIPageViewController以编程方式加载 6 个子进程UIView场景 它们承载 添加 元素功能的各个阶段 目前PageViewController类将每个子视图添加到一个数组
  • 流星 0.9.x 更新

    如何找出导致我的应用程序无法更新的原因 我不断收到 该项目是最新版本 与您当前的包限制兼容 信息 以下是更新命令的输出 Refreshing package metadata This may take a moment Figuring
  • 资产文件夹的绝对路径

    如何引用手机内存中的资源 我需要它将绝对路径写入 html 文件以加载资源文件夹中的一些图像 这个html保存在手机内存中 但我无法将这些图像保存在手机内存中 因为它们非常大 file android asset where 是你里面的东西
  • uiscrollview 不会取消 uisegmentedcontrol 的内容触摸

    我已经对 UIScrollView 进行了子类化 并按以下方式重写了 TouchesShouldCancelInContentView 方法 BOOL touchesShouldCancelInContentView UIView view