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

news2024/11/20 8:36:54

场景:

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

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


 

解决方案:

使用UIGestureRecognizerDelegate的gestureRecognizer:shouldReceiveTouch:实现效果

//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==

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YUM搭建LNMP

配置在线源 安装Nginx 检查安装版本 开启服务设置开机自启 安装MySQL 连接MySQL 开启服务设置开机自启 在日志中查看MySQL用户原始密码 登录MySQL 关闭自动更新 安装 php7.2 开启服务设置开机自启查看版本号 配置 nginx 支持 PHP 解析 测试MySQL是否能成功登录

IDEA下Logback.xml自动提示功能配置

首先打开logback的配置文件&#xff0c;在configuration标签中加入xsd的配置 <configuration xmlns"http://ch.qos.logback/xml/ns/logback"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://ch.qos.logback/xml…

python 视频转字符视频 bate

只需要在最后一行括号填入视频路径即可 import os from PIL import Image, ImageDraw, ImageFont import cv2 import time from tqdm import tqdm import threading if __name__ __main__:# path rimg\sportball\0.jpgdef cv2_pit_imgchar(path,save_path):def create_i…

Flutter系列(十)实现个人中心页

基础工程&#xff1a; Flutter系列&#xff08;四&#xff09;底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 一、前言 本文用flutter实现个人中心页布局&#xff0c;效果如下图&#xff1a; 二、使用的组件 1.颜色渐变&#xff1a;LinearGradient 线性渐变组…

ChatGLM-6B第二代模型开源,拿下LLM模型中文能力评估榜单第一名

ChatGLM-6B 自3月14日发布以来&#xff0c;深受广大开发者喜爱。截至 6 月24日&#xff0c;来自 Huggingface 上的下载量已经超过 300w。 为了更进一步促进大模型开源社区的发展&#xff0c;我们再次升级 ChatGLM-6B&#xff0c;发布 ChatGLM2-6B 。在主要评估LLM模型中文能力…

【SWAT水文模型】ArcSWAT各种报错总结

1 Error Number :-2147467259&#xff1b; 对 COM 组件的调用返回了错误 HRESULT E_FAIL 1.1 报错内容 Error Number :-2147467259 Eror Message: Eror HRESULTE FAIL has been retuned froma alltoa a COM component. Module:mAnalysis Function:dissolve Procedurure:1 随后…

DDR5这么快,为啥还能那么稳?

高速先生成员--姜杰 大家都在关注DDR5跑的有多快&#xff0c;高速先生却在关心它为什么能够跑的稳…… 内存的稳定性&#xff0c;离不开RAS功能。提起RAS&#xff0c;熟悉DDR的小伙伴们一定记得行地址选通信号&#xff08;Row Address Strobe, RAS&#xff09;&#xff0c;不…

Vuforia专题:设置AR摄像头自动对焦

Vuforia专题&#xff1a;设置AR摄像头自动对焦 一&#xff0c;前言 在之前使用的时候&#xff0c;如果没有设置自动对焦可以发现&#xff0c;摄像头画面极其模糊。并导致识别的结果不是很理想 加上自动对焦后的效果如下&#xff1a; 二、具体步骤 1、ARCamera添加脚本Cam…

Axure教程——自动获取时间

本文介绍用Axure制作的自动获取时间 效果预览 预览地址&#xff1a;https://y0pdhk.axshare.com 原型制作 1、需要的元件 六个矩形 一个动态面板 2、制作 年月日 拖入一个矩形元件&#xff0c;命名为“年月日”&#xff0c;文本设置为“年月日”&#xff0c;如图&#xff1a…

基于FFMPEG的视频拉流并传给OPENCV显示

基于FFMPEG的视频拉流并传给OPENCV显示 依赖文件解压代码编写依赖配置编译运行 依赖文件解压 将ffmpeg-master-latest-win64-gpl-shared解压&#xff0c;得到如下所示文件夹&#xff1a; 将其中的bin目录下的.dll文件复制到C:\Windows\System32目录下。 代码编写 基于FFMPE…

vscode 的终端不识别npm 命令

1.问题描述 在vscode终端输入npm指令无法识别 但是在cmd就可以 在PowerShell输入npm同样无法识别 2.解决办法 点击火狐浏览器可以看到有一个路径 没有火狐浏览器点击vscode同样可以看到路径 注&#xff1a;箭头指向的就是 然后在我的电脑找到该路径 下的npm文件 删除该…

SaaS架构方案

四大架构体系&#xff08;业务架构&#xff08;省略&#xff09;、系统架构、技术架构、布署架构&#xff09; 1.业务架构&#xff08;省略&#xff09; 2.系统架构 3.技术架构图 4.布署架构

Kubernetes核心概念汇总—Kubernetes 架构

一、概述 此页面是 Kubernetes 的概述。 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态&#xff0c;其服务、支持和工具的使用范围相当广泛。 Kub…

杂记 | Linux服务器使用docker安装keycloak(docker-compose)

文章目录 01 关于keycloak02 准备工作2.1 安装docker2.2 安装docekr-compose2.3 获取https证书 03 编写docker-compose.yml04 访问keycloak 01 关于keycloak Keycloak是一个开源的身份和访问管理解决方案&#xff0c;由RedHat公司开发和维护。它提供了一套全面的工具和功能&am…

centos 安装 nginx

1.下载nginx安装包 wget -c https://nginx.org/download/nginx-1.24.0.tar.gz 下载到了当前目录下 2.解压安装包 解压后的结果 3.安装依赖 yum -y install gcc gcc-c make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel 4. ./configure --prefix/usr/lo…

雷达侦察系统

文章目录 前言 一、系统组成 二、数字信道化侦察接收机 三、信号处理器 总结 前言 本人主要从事电子侦察中辐射源目标定位的研究工作&#xff0c;下面简单介绍传统雷达侦察系统的简单系统组成&#xff0c;希望有研究相同方向的同行可以私信交流。 一、系统组成 典型雷达侦察…

python机器学习—— 数据预处理 算法初步

目录 数据预处理1.获取数据2.处理缺失值3.划分数据集4.数据预处理和PCA降维5.算法实现&#xff1a;估计器 数据预处理 1.获取数据 from sklearn.datasets import load_iris liload_iris() print("获取特征值") print(li.data) print("目标值",li.target)#…

千万级规模微服务稳定性技术揭秘:隔离策略

随着当今云原生的发展&#xff0c;无状态微服务系统通过其良好的设计理念和相关技术栈的成熟&#xff0c;成为越来越多企业建设系统的首选&#xff0c;但不可避免的是随着微服务拆分系统增多&#xff0c;稳定性慢慢会被重视&#xff0c;如何保证服务7*24小时不间断服务&#xf…

数据结构---循环链表

数据结构—循环链表 循环单链表 typedef struct LNode {ElemType data;struct LNode* next; }LNode, *LinkList;循环单链表初始化 bool InitList(LinkList &L) {L (LNode*)malloc(sizeof(LNode));if (L NULL) return false;L->next L; //头结点next指向头结点retur…

Postman:mock server简单使用,自定义获取response body

一.mock server的作用 创建一个虚假的服务器接口&#xff0c;只要访问就可以返回设定好的response. 可用于接口调试和接口自动化测试。 二.操作步骤 首先创建一个mock server 指定response body 创建成功后Collections那里会自动多一个跟mock server 对应的接口 接下来…