iOS UI 技巧: 视图无法被点击

掌握iOS视图定制:表格与集合视图深度解析 本章节深入探讨了iOS开发中表格视图(table views)和集合视图(collection views)的使用方法和定制技巧。从表格视图的基础结构开始,讲解如何通过数据源和代理来动态管理内容,并通过自定义单元格来实现更复杂的布局。同时,对于集合视图的介绍则着重于其灵活的布局选项和自定义布局的实现,展示了如何在二维空间中自由排列视图元素,以实现网格或任何自定义布局。 阅读详情

初学 iOS 开发, 有时候会被一些很简单的问题给弄得头昏脑涨.

iOS UI 技巧系列博客, 将和大家一起总结和积累在 iOS 开发中遇到的各种奇葩问题.

今天和大家聊聊, 当前设置的视图无法被点击的原因和解决思路.

当我们添加一个视图A到另外一个视图B上面, 希望视图B可以被点击或者被 touch.

当然, 这个是一个再正常不过的要求.

当你一切准备就绪, 发现, 卧槽, B 为什么点击不了.什么鬼.

B 不能被点击, 有下面几个原因.

  1. 被其他透明的视图挡住
  2. 没有设置 userInteractionEnabled 为 yes
  3. frame 设置不准确
  4. tableView 中的 cell 高度不够

那么解决方案, 也有几种

  1. 颜色法(设置不同的 BackGroundColor 调试)
  2. 看视图的等级结构
  3. 设置 userInteractionEnabled为 yes
  4. 设置 masksToBounds为 yes

在开发的过程中, 比较常见的就是 userInteractionEnabled 设置问题和 frame 错误问题.

iOS 开发文档说了, userInteractionEnabled 属性默认是 YES, 但是有些 UIView 的子类改变了这个继承的属性.
你看 UILabel 的头文件:

// default is NO
@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;  

凡是 UIControl 的子类该属性都是 YES.
UIControl 子类看下图.

图1

这些东西不需要大家死记硬背. 多查文档就知道了.

至于视图层级查看, Xcode 现在也自带了一个类似 Reveal 的功能, 但是个人还是比较习惯 Reveal, 使用 Reveal 来排查和优化 UI 问题, 简直爽.

关于 frame 导致无法点击, 这个问题在初学者面前确实有点难搞.

下面举个例子.

图2

绿色视图是视图 A, 红色视图是 B 视图(Button).

A 视图添加了 B 视图.

#import "ViewController.h"

#define kViewWidth  (200)
#define kViewHeight (160)

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(50, 100, kViewWidth, kViewHeight)];
    view.backgroundColor = [UIColor greenColor];


    [self.view addSubview:view];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

    // 将 button 添加到 vview 中
    [view addSubview:button];

    [button setBackgroundColor:[UIColor redColor]];
    [button setTitle:@"可能你点击不了我!" forState:UIControlStateNormal];
    button.frame = CGRectMake(0, kViewHeight, kViewWidth, 100);

    [button addTarget:self action:@selector(onClickButton:) forControlEvents:UIControlEventTouchUpInside];
}

- (void)onClickButton:(UIButton *)sender
{
    NSLog(@"button is clicked.");
}

@end

无论你怎么点击视图 B, 都不可能调用 onClickButton 方法.

仔细观察代码, 可以发现 Button 的位置已经超出了父视图 A 的范围.

那么我们可以设置 masksToBounds, 将超出父视图的子视图裁剪掉.

view.layer.masksToBounds = YES;

再次运行, 你就无法看到红色的 Button 视图了.

重新调整 Button 的 y 位置, 就可以解决问题.

这里的视图层级关系比较简单.
当视图比较复杂的时候, 猜测是否是 frame 问题, 可以这样调用:

subView.superview.layer.masksToBounds = YES;

我的新博客: http://www.veryitman.com/

扫描关注微信公众号, 期待与你交流.
微信

掌握iOS表格视图与集合视图的高级技巧 本文将详细探讨如何在iOS开发中使用UITableView和UICollectionView展示内容,并展示如何为表格视图添加刷新控制以及如何为集合视图提供基础内容。通过具体的代码示例和详细解释,读者将学会如何利用UITableView和UICollectionView的高级特性来提升应用的用户交互体验。 阅读详情

相关推荐

完全掌握iOS弹出视图设计 - KWPopoverViewDemo解析

在iOS应用开发中,弹出框是一种常见的用户界面元素,用于显示临时信息、警告、确认操作等。它是一种模态视图,能够覆盖在应用的主界面上,直到用户进行某些操作之后才会消失,如点击确认或取消按钮。在iOS开发中,布局参数是定义视图在屏幕上位置和大小的基础。在自定义弹出框的布局中,通常会使用frame和属性来控制视图的布局。frame属性定义了视图的位置和尺寸,而属性则描述了视图在父视图尺寸变化时如何调整自己的大小。在自定义弹出框中,布局参数的理解是至关重要的。

weixin_36235398的博客 981

iOS 开发中按钮不能点击的几种情况

上午被按钮的一个点击不能触发事件折腾了许久。现已解决,总结并分享出来。希望能对遇到这种情况的人有所帮助。 1、UIButton不能点击情况的第一种是,你将button添加到一个不能响应点击事件的View里。如你将button添加到UIImageView中,解决办法只需将UIImageView的 userInteractionEnabled设为YES即可。 2、UIButton不能点击

u012655309的专栏 1万+

全面掌握iOS视图动画:从弹出到消失的精彩过渡

类是Core Animation框架的核心组件之一,其继承体系如下图所示:提供了基本的动画效果,可以定制从起始值到结束值的变化过程。允许定义一系列的值,动画会依次展示这些值之间的过渡效果。可以组合多个动画,使它们同时执行。提供了视图切换时的转场动画,例如淡入淡出效果。是一个协议,它定义了动画开始、结束等时刻的回调方法。在本章节中,我们介绍了类及其子类的核心概念、关键属性和方法。

weixin_42471823的博客 1102

ios web页 onclick 点击失效

首先上代码 <!DOCTYPE html> <html> <head> <title>ios web页面 onclick 点击失效</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-sc...

匹夫的博客 4975

【ArcGIS Add-in编程】如何创建ArcMap的下拉菜单插件

step1. VS2010中创建一个空的解决方案step2.创建一个项目 直接点击finish。step3 为该项目创建项目,选择Menu,作为根菜单,而后修改xml中的items项,添加需要放在下拉菜单中的项目,例如一个按钮; step4 现在可以创建项目,作为菜单中的项目。为该项目添加新的项目,选择button 此时 xml文件中,多了该button的项目,将该项目添加到items

吃货小跟班的博客 4431

第14.5章 高翔博士最新开源框架Lightning-LM源码解读(五):揭秘位姿图优化核心模块,从数学原理到代码实现

本文介绍了Lightning-LM框架中的位姿图优化(PGO)模块实现。该模块通过融合多源定位信息(激光定位、激光里程计、DR等),构建并优化位姿图来获得更精确的位姿估计。 主要内容包括: 模块概况与数据流程:初始化配置→添加PGO帧→分配位姿→优化求解→更新位姿→滑动窗口 16个核心函数详解:从构造函数到边缘化处理,涵盖完整的PGO工作流程 关键技术点:噪声参数设置、优化问题构建、约束添加、异常值处理等 关键数据结构:帧队列管理、顶点和边构建、优化统计信息收集 该PGO模块采用增量式优化方式,支持多种约束

行知SLAM 1217

vue踩坑之H5页面在ios的webview里面,长时间放到后台按钮失灵

在ios上应用切到后台后,再次进入会因为加载打包后的某些文件加载失败导致页面中的跳转按钮失灵

weixin_45630548的博客 1541

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

算法大师! 527

UIbutton作为UIimageView的子视图 不能触发点击事件原因

根本原因:UIimageView的可交互属性默认为NO; 解决方法: ① pullDownImageView.userInteractionEnabled = YES; ② 把UIimageView和UIbutton均作为UIview的子视图.    [self.view addSubview:pullDownImageVIew];    [self.view addSubview

博客见证进步 2161

机器人控制算法九之 位姿描述与空间变换

机器人控制算法九之 位姿描述与空间变换

yohnyang的博客 1034

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 113

ios触摸超出_iOS的UIButton被挡住或者超出所在UIView的范围怎么办

如图所示很简单的一个功能有一个UITableView,TableViewCell里面包含一个下拉框控件,控件用的是我之前写的一个类似Web端dropdownlist的功能。但是实际使用起来的时候遇到一个问题,就是控件的点击区域不包含在当前UIView里面。比如图中这样,当点击下拉选项的时候触发的是UITableView的事件,不会触发到下拉框的选择事件,原因很简单,事件的先后顺序而已。这里使用到的...

weixin_39632293的博客 872

【图像去噪】论文精读:Restormer: Efficient Transformer for High-Resolution Image Restoration

论文题目:Restormer: Efficient Transformer for High-Resolution Image Restoration —— Restormer:用于高分辨率图像恢复的高效变压器高效Transformer模型用于图像恢复!由于卷积神经网络 (CNN) 在从大规模数据中学习可泛化的图像先验方面表现良好,因此这些模型已广泛应用于图像恢复和相关任务。最近,另一类神经架构 Transformer 在自然语言和高级视觉任务中显示出显着的性能提升。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1528

iOS Hierarchy Viewer高级技巧:如何利用浏览器实时预览和编辑UI属性

iOS Hierarchy Viewer是一款强大的iOS开发工具,能够帮助开发者轻松实现UI层级的实时预览和CoreData调试。本文将详细介绍如何利用这款工具在浏览器中实时预览和编辑UI属性,提升iOS应用开发效率。 ## 工具核心功能概览 iOS Hierarchy Viewer通过浏览器界面提供了直观的UI层级可视化功能。其核心组件位于[iOSViewHierarchy/webapp/

gitblog_00368的博客 1062

2026年国赛C题微网与外部电网电力调控策略 (三):问题三、问题四滚动预测、实时电价与结果核验

专栏内定期更新ABCDE五题详细思路、代码(含运行结果图)和讲解视频-(11号之前半价):问题三看起来只是多给了一个光伏预报附件,实质上它改变了整道题的信息结构:问题四则是在问题二、问题三之上替换价格来源。问题4-2相当于“确定性计划+实时电价”,问题4-3相当于“滚动预测+实时电价”。物理模型完全不变,改变的是价格序列和费用口径。本文先给出核心结果:从结果看,问题3比问题2多约164.21万元,问题4-3比问题4-2多约168.79万元。主要增量不是“储能没有工作”,而是预测误差、计划偏差和紧急购电造成的

YOLO 345

多尺度仿真软件:Copasi_(1).Copasi概述

Copasi(Complex Pathway Simulator)是一款开源的多尺度仿真软件,专为生物化学、系统生物学和合成生物学领域的研究人员设计。它不仅能够模拟细胞内和细胞间的生化反应网络,还能处理代谢途径、信号传导途径和基因调控网络等多种复杂系统。Copasi提供了用户友好的图形界面和强大的命令行接口,支持多种仿真算法和分析工具,使用户能够高效地进行模型构建、仿真和分析。Copasi允许用户创建自定义报告,以便生成特定格式的仿真结果。用户可以通过图形界面或命令行创建自定义报告。

kkchenjj的博客 857

10个InAppViewDebugger高级调试技巧:提升iOS开发效率

InAppViewDebugger是一个强大的iOS视图调试工具,它允许开发者在设备上直接调试UI布局问题,无需连接到电脑。这款工具提供了类似Xcode视图调试器和Reveal的功能,但完全嵌入在应用中,让你在任何环境下都能快速诊断UI问题。🚀 ## 📱 InAppViewDebugger是什么? InAppViewDebugger是一个开源库,为iOS应用提供内置的视图调试功能。它包含两

gitblog_00196的博客 1079

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PonyDebugger视图检查模式:点击选择与元素面板联动

PonyDebugger是Square公司开发的一款强大的iOS和Mac应用调试工具,通过WebSocket将实时数据传输到Chrome Developer Tools扩展中,为开发者提供可视化调试体验。其中,视图检查模式作为核心功能之一,让开发者能够直观地分析和调试应用界面。✨ ## 🔍 什么是视图检查模式? 视图检查模式是PonyDebugger的核心功能,它允许开发者通过点击操作来选择

gitblog_00788的博客 461

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

第六章 用堆栈视图(Stack Views)来设计UI

第六章 用堆栈视图(Stack Views)来设计UI iOS9带来了许多新的特性来让我们的开发生涯更简单,Stack Views的简介就是一个很好的例子.之前给你们简单的介绍了auto layout.这个例子让我们工作起来很简单.但是,随着你的app UI变得更复杂,你会发现给所有的iOS设备完美的提供界面约束变得更难.这是苹果在最新的Xcode和Ios版本中介绍Stack

zetan的博客 1343

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

UI初级--视图层级管理

@UI视图的层级管理

教小贱~~iOS界的一朵奇葩 1135

MyFlowLayout流式布局实战:打造响应式iOS UI的10个核心技巧

MyLayout是一个功能强大的iOS UI框架,采用Objective-C实现,集成了Android布局、iOS AutoLayout、SizeClass、HTML CSS浮动和flexbox以及bootstrap的功能。通过MyLayout,开发者可以使用LinearLayout、RelativeLayout、FrameLayout、TableLayout、FlowLayout等多种布局方式构

gitblog_00317的博客 647

FLEX视图调试实战指南:3步定位iOS UI布局难题

你是否还在为iOS应用中的视图错位、层级重叠问题抓狂?花费数小时打印日志却找不到根本原因?本文将带你掌握FLEX这款强大的**iOS应用内调试工具**,通过可视化界面3步搞定90%的UI布局问题,让调试效率提升10倍。 读完本文你将获得: - 3分钟上手FLEX视图调试的核心功能 - 2种视图层级浏览模式的切换技巧 - 5个提升UI问题定位效率的实战窍门 - 完整的视图调试工作流与避坑指南 #...

gitblog_00230的博客 470

SuperPlane 性能剖析实战:基于 net/http/pprof 的 CPU、内存与并发竞争 Profile 采集指南

SuperPlane 是一个"一站式工程(one-shot engineering)"开源工厂,其后端将公共 API、内部 gRPC API 以及全部 Worker 运行在**单个进程**内。这意味着开发者只需启动**一个** `net/http/pprof` 服务,就能覆盖整个后端的运行时画像。本文围绕 [docs/contributing/profiling.md](https://link.

gitblog_00937的博客 973

Ios5 基础二 –丰富的用户界面

Ios5 基础 –丰富的用户界面 一. 本节目标: 1.实现一个图像视图、一个滑块、两个文本段、一个分段控件、两个开关和一个IOSbutton;2.学习如何检索和设置控件的值; 二. 控件分类: 用户界面的控件一般有三种基本形式:活动、静态、和被动; 1. 活动:上节的按钮,点击会触发某些动作或代码; 2. 静态:用户不能做任何操作,比如本节的图像(

xiaoyun8822的专栏 2357

TapkuLibrary高级技巧:自定义Alert视图与空数据页面设计

TapkuLibrary是一款精心打造的开源iOS框架,提供了丰富的UI组件和工具类,帮助开发者快速构建美观且功能强大的iOS应用。本文将重点介绍如何利用TapkuLibrary实现自定义Alert视图和空数据页面设计,提升应用的用户体验。 ## 自定义Alert视图:TKAlertCenter的灵活应用 ### 基本使用方法 TapkuLibrary的`TKAlertCenter`类提供了

gitblog_00284的博客 981

Peek调试技巧:解决iOS应用UI问题的10个实用方法

Peek是一款强大的iOS应用运行时检查工具,能够帮助开发者、设计师和测试人员在应用运行过程中实时查看和分析用户界面元素。无论是调试布局问题、验证设计规范还是检查可访问性属性,Peek都能提供直观且高效的解决方案,让UI调试工作变得更加简单快捷。 ## 一、快速启用Peek的实用技巧 Peek的集成过程非常简单,只需几行代码即可在你的iOS应用中启用这一强大工具。对于设备调试,你只需在AppD

gitblog_00550的博客 505
上一篇: iOS AutoLayout: UIView 关联 Xib 不设置 File's Owner
下一篇: iOS AutoLayout: XIB 设置 CALayer 属性
veryitman
博客等级 码龄16年 472粉丝 310原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值