Objective-C 父元素和子元素的点击事件

这篇具有很好参考价值的文章主要介绍了Objective-C 父元素和子元素的点击事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景:

Objective-C 父元素和子元素的点击事件

(需求1)pageA一开始是【默认模式】,点击父元素view(包括【搜索】文字),进入【搜索模式】;

(需求2)在pageA中,点击【取消】文字时,本身文字修改为【搜索】并且返回【默认模式】


 

解决方案:

使用UIGestureRecognizerDelegate的gestureRecognizer:shouldReceiveTouch:实现效果文章来源地址https://www.toymoban.com/news/detail-508685.html

//pageA.m
@interface PageA()<UIGestureRecognizerDelegate>
@end
- (void)viewDidLoad {
    [super viewDidLoad];
    UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(10,10,300,50)];
    [self.view addSubview:parentView];

    // 创建父元素的点击手势识别器
    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(parentHandler:)];
    [parentView addGestureRecognizer:gesture];
    
    self.childLabel = [[UILabel alloc] initWithFrame:CGRectMake(200,10,300,50)];
    [parentView addSubview:self.childLabel];
    childLabel.text = @"搜索";
    // 默认是默认模式

    // 创建子元素的点击手势识别器
    UITapGestureRecognizer *gesture2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(childHandler:)];
    [self.childLabel addGestureRecognizer:gesture2];
    
    // 设置子元素手势识别器的代理对象
    gesture2.delegate = self;
}

// 父元素手势的处理方法
- (void)parentHandler:(UIGestureRecognizer *)gestureRecognizer {
    NSLog(@"==parentHandlerd==");
    // 进入搜索模式
    self.childLabel.text = @"取消";
    // 其他代码...
}

// 子元素手势的处理方法
- (void)childHandler:(UIGestureRecognizer *)gestureRecognizer {
    NSLog(@"==childHandler==");
    // 返回默认模式
    self.childLabel.text = @"搜索";
    // 其他代码...
}
// 实现子元素手势识别器的代理方法
// 系统会调用这个方法来询问代理对象是否应该接收这个触摸事件
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    NSLog(@"==child shouldReceiveTouch==");
    UILabel* label = (UILabel*)gestureRecognizer.view;
    if([label.text isEqualToString: @"搜索"]){
        // 子元素不接收该触摸事件,父元素响应
        return NO; 
    } else {
        // 子元素接收该触摸事件,父元素不响应
        return YES;
    }
}
当点击parentView时,进入搜索模式,输出以下信息
==parentHandlerd==

当点击【搜索】文字时,进入搜索模式,输出以下信息
==child shouldReceiveTouch==
==parentHandlerd==

当点击【取消】文字时,返回默认模式,输出以下信息
==child shouldReceiveTouch==
==childHandler==

到了这里,关于Objective-C 父元素和子元素的点击事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【KVC补充 Objective-C语言】

    2024年02月15日
    浏览(41)
  • Objective-C日期NSDate使用

    2024年01月21日
    浏览(48)
  • Effective Objective-C 学习(二)

    “属性”(property)是 Objective-C 的一项特性,用于封装对象中的数据。Objective-C 对象通常会把其所需的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中,“获取方法”(getter)用于读取变量值,而“设置方法”(setter)用于写入变量值。开发者可以令

    2024年02月20日
    浏览(47)
  • Effective Objective-C 学习(三)

    Objective-C 使用引用计数来管理内存:每个对象都有个可以递增或递减的计数器。如果想使某个对象继续存活,那就递增其引用计数:用完了之后,就递减其计数。计数变为 0时,就可以把它销毁。 在ARC中,所有与引用计数有关的方法都无法编译(由于 ARC 会在编译时自动插入

    2024年02月22日
    浏览(47)
  • use gnustep objective-c

    专注于概念,而不是迷失在语言技术细节中 编程语言的目的是成为一个更好的程序员; 也就是说,在设计和实现新系统以及维护旧系统方面变得更加有效 header preprocess interface implementation method variable declare and expression comment basic integer set and float set enum type void type derive type incl

    2024年02月14日
    浏览(42)
  • Effective Objective-C 学习(四)

    在执行后台任务时,GCD 并不一定是最佳方式。还有一种技术叫做 NSOperationQueue,它虽然与 GCD 不同,但是却与之相关,开发者可以把操作以 NSOperation 子类的形式放在队列中,而这些操作也能够并发执行。 GCD是纯C的API,而NSOperationQueue是Objective-C的对象。这意味着使用GCD时,任

    2024年02月19日
    浏览(39)
  • Objective-C获取变量类型的方法

    在Objective-C中,要获取一个对象的类型,可以使用[object class]方法。这将返回一个Class对象,表示该对象的类型。 另外,typeid是C++中的,用于获取一个变量的类型信息。在Objective-C中,typeid并不适用于获取对象类型。相反,您应该使用[object class]方法来获取对象的类型。

    2024年02月13日
    浏览(42)
  • Objective-C之Class底层结构探索

    在讲 OC-Class 底层类结构之前,先看下下面这张图: 通过isa走位图 得出的结论是: 1,类,父类,元类都包含了 isa , superclass 2,对象isa指向类对象,类对象的isa指向了元类,元类的 isa 指向了根元类,根元类 isa 指向自己 3,类的 superclass 指向父类,父类的 superclass 指向的根类

    2024年03月24日
    浏览(42)
  • 【Objective-C】浅析Block及其捕获机制

    什么是Block? Block (块), 封装了函数调用以及调用环境的 OC 对象 ,Objective-C闭包(可以在内部访问外部的值),相当于C语言的函数指针,把一个函数写在一个函数内部,而OC并没有函数(方法)嵌套这一语法 Block的声明 格式: 返回值 (^block名称)(形参列表) ^ 代表块的符号

    2024年02月08日
    浏览(34)
  • Effective Objective-C学习第一周

    OC是一种消息型语言,使用的是“消息结构”而非“函数调用”,由smalltalk演化而来。使用消息结构的语言运行时执行的代码由运行环境来决定,而使用函数调用的语言由编译器决定。 OC将堆内存管理抽象出来了。不需要使用malloc或者free来分配或释放对象所占的内存。OC运行

    2024年01月17日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包