UIButton的用处特别多,这里只记录下把按钮应用在图文显示的场景,和需要把图片作为按钮的背景图片显示场景; 另外记录下在父控件的子控件优先显示方法(控件置于最前面和置于最后面)。...*)view; // 将子控件view显示在父控件的所有子控件的最前面 - (void)sendSubviewToBack:(UIView *)view; //将子控件view显示在父控件的所有子控件的最后面...:11]; //将子控件redView在父控件view的所有子控件的最前面显示 [self.view bringSubviewToFront:redView...= [self.view viewWithTag:13]; //获取紫色子控件 //将子控件purpleView在父控件view的所有子控件的最前面显示...= [self.view viewWithTag:13]; //获取紫色子控件 //将子控件purpleView在父控件view的所有子控件的最前面显示
下面我们将引入UIView; 3. UIView view(视图)代表屏幕上的一个矩形区域。...创建view的步骤如下: ①开辟空间并初始化视图(初始化时,给出视图位置和大小) ②对视图做一些设置(比如:背景颜色) ③将视图添加到window上进行显示 ④释放视图对象 视图创建代码: UIView...当子视图添加到此视图时,会根据bounds指定的原点(0,0)计算frame,而非左上角。...UIView的操作方法 1)添加视图 UIView的addSubview:方法可以添加子视图,对于同一个视图的所有子视图来讲,后添加的子视图会把已加的子视图盖在下面。...3)视图重要属性 UIView作为其他UI控件的BaseClass,提供了很多属性(详见下表): ?
前言 问题:升级最新IDE Xcode,发现app首页的cell中按钮也无法点击了。...原因:往cell添加子视图的方式不规范,导致contentView 置于自定义控件的上层,引发界面无响应(注意处理相关方法) I 问题分析 iOS14 UITableViewCell的子试图不能点击或者滑动等手势响应问题...例如125个文件的1452个地方使用错误的方法,这个如果不使用hook高质工作量有点大 所以通过Runtime hook cell的addSubView 方法强制修改为正确的添加cell 子视图的方式...UIPrintOptionCell的contentView是UIListContentView 解决方式:如果子类名称包含ContentView就不处理,不包含ContentView才将其添加到cell...比如获取子视图采用cell.subviews 也要记得修改为 cell.contentView.subviews.
这一步是什么意思,其实很简单,就是找到你所触摸点对应的那个最上层的视图,它的工作原理是这样的:当用户发出事件后,会产生一个触摸事件,系统会将该事件加入到一个由UIApplication管理的事件队列中,...UIApplication会取出队列中最前面的事件,发消息给UIWindow,然后UIWindow会对其所有子视图调用hitTest:withEvent:这个方法,这个方法会返回一个UIView的对象,...YES,则会遍历当前视图的所有子视图,统统发送hitTest:withEvent:这个消息,如果返回NO,则hitTest:withEvent:方法返回nil; 上面说起来有些绕,其实就是:hitTest...:withEvent:方法会一层一层的向上找,若最上层响应的子视图pointInside:withEvent:返回YES,则返回此子视图,如果所有的都返回nil,则返回当前视图本身self。...如果它自身不能处理消息,会通过nextResponder将消息传递给下一个处理者,默认只要有一个view将消息处理了,这个消息处理传递链将不再传递。
2 UIView接口说明 2.1 API接口说明 addSubview: 添加一个子视图到接收者并让它在最上面显示出来。...*)subview 参数 subview 被添加做子视图的视图对象 讨论 被子类重写用来执行额外的命令当子视图添加到接收者。...- (void)removeFromSuperview 讨论 接收者同时释放;如果你计划重用它,要确定在发送消息前保持它并在添加到其他UIView对象作为子视图後移除。...消息或者子视图从接收者视图层次中移除因为它要被添加到其他视图了 3 UIView动画 3.1 概述 UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏、产生流畅的动画效果,进而改善用户体验...如果一个子视图的区域超过父视图的bound区域(父视图的clipsToBounds属性为NO,这样超过父视图bound区域的子视图内容也会显示),那么正常情况下对子视图在父视图之外区域的触摸操作不会被识别
在用户触摸屏幕之后,屏幕硬件会接受用户的操作,并采集关键的参数传递给IOKit,而IOKit将这些数据打包并传给SpringBoard.app,继而转发给前台App。...确定目标视图之后,UIApplication便会发送事件,将UITouch和UIEvent发送给目标视图,触发其touches系列的方法。...,hitTest方法会接着调用UIWindow子视图的hitTest方法。...UIWindow是UIView的子类,UIView的hitTest方法实现和上述过程一致。 思考: UIView在调用子视图hitTest时,是先调用哪些子视图?...但是当手势识别成功之后,默认会cancel后续touch操作,从目标视图开始的响应链都会收到touchesCancelled方法,而不是正常的touchesEnded方法,堆栈如下: ?
YogaKit暴露YGLayout作为UIView上的一个Category,这个Categoryt添加configureLayoutWithBlock:方法到UIView,将YGLayout参数传进block...里,并使用这些信息来配置视图的布局属性。...通过所需的Yoga属性配置每个参与的视图来构建你的布局。一旦完成,你在根视图的YGLayout上调用applyLayoutPreservingOrigin:方法,这会计算并应用布局到根视图和子视图。...再次将代码简化: UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; view.backgroundColor = [UIColor...bottomView的marginTop设置的是0,按正常思维而言应该在view的最上方,但结果却是在中间位置。 那么,在view上再添加一个UIButton会是什么结果呢?
方法 : 视图被隐藏 或 关闭后, 回调该方法; -- viewWillLayoutSubviews 方法 : 视图将要排列其子视图时, 需要回调的方法; -- viewDidLayoutSubviews...方法 : 视图已经排列好其子视图后, 回调的方法; UIViewController 代码示例 : -- 头文件 : // // OCViewController.h // FirstApp...视图控制器 并 关联 用户界面 self.window.rootViewController = controller; // 创建 UIView 对象 UIView * rootView...addTarget:self action:@selector(button_click) forControlEvents:UIControlEventTouchUpInside]; // 将按钮添加到...: " 方法 : 将控件添加到窗口完成时, 回调该方法; -- "willMoveToWindow : " 方法 : 将控件添加到窗口之前, 回调该方法; -- "touchesBegan : withEvent
从后往前遍历子视图重复执行 指的是按照 FILO 的原则,将其所有子视图按照「后添加的先遍历」的规则进行命中测试。...-> UIView? { // 视图无法接受事件 if !...传递到 UIScrollView 后,其会先将该事件拦截而不会立即传递给对应的子视图, 同时开始一个 150ms 的倒计时,并监听用户接下来的行为。...:inContentView:方法询问是否将事件传递给对应的子视图 (如果返回 NO, 则该事件不会传递给对应的子视图,如果返回 YES,则该事件会传递给对应的子视图,默认为 YES); 当事件被传递给子视图后...open var canCancelContentTouches: Bool // 在UIScrollView的子类中重写该方法,用于返回是否将事件传递给对应的子视图,默认返回YES,如果返回NO,该事件不会传递给对应的子视图
通过上面的示例可以发现: 只设置cornerRadius时,默认情况下,只影响背景颜色,而不影响背景图片或者子图层。 如果想要截取这个视图的图片和子视图,需要设置masksToBounds为YES。...导致一直显示不出来阴影,差的原因是无法共存,到现在才发现是maskToBounds导致的。 maskToBounds把阴影也裁掉的结果肯定不是我们想要的。...将代码修改成如下: @interface ViewController () @property (weak, nonatomic) IBOutlet UIView *leftView; @property...如果想了解的话请点击此处 组透明 alpha UIView有一个alpha属性来决定视图的透明度,对应的CALayer有一个opacity属性。这两个属性都会影响子层级的显示透明度。 下面做个示例。...这是正常的透明度的表现。但是如果图层包含一个同样显示50%透明的子图层时,你所看到的视图,50%来自子视图,25%来了图层本身的颜色,另外的25%则来自背景色。 如果想保持透明度一直。
于是我开始搜索并总结出了几个不通过继承的方式来更改UISearchBar外观的方法。...同时我们也可以直接获取UISearchBar的subViews,UISearchBar的subView是一个UIView的实例,这个UIView包含了所有在UISearchBar上可以展示的子视图,iOS...SDK提供的UISearchBar,在iOS7之前是分为UISearchBarBackground、UISearchBarTextField、UIButton这几个类的实例组成,而在iOS7之后,是将...我们可以通过循环遍历出UISearchBar上所有展示出来的子视图 for(UIView*viewin[[[_searchController.searchBar subviews]lastObject...UISearchBarTextField")]) {} if([viewisKindOfClass:NSClassFromString(@"UINavigationButton")]) {} } 通过KVC获取子视图
0; 0 0); userInteractionEnabled = NO; layer = > 1.1 注意事项 因为此问题涉及的是添加子视图...例如125个文件的1452个地方使用错误的方法,这个如果不使用hook高质工作量有点大 ?...所以通过Runtime hook cell的addSubView 方法强制修改为正确的添加cell 子视图的方式 2.1 全局修改 只允许添加 UITableViewCellContentView,其余都直接添加到...[self.contentView addSubview:view]; } } @end 2.2 注意事项 因为此问题涉及的是添加子视图...比如获取子视图采用cell.subviews 也要记得修改为 cell.contentView.subviews.
因为队列的特点是FIFO,即先进先出,先产生的事件先处理才符合常理,所以把事件添加到队列。...1.点击一个UIView或产生一个触摸事件A,这个触摸事件A会被添加到由UIApplication管理的事件队列中。...2.在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理 3.如果window对象也不处理,则其将事件或消息传递给UIApplication对象...4.如果UIApplication也不能处理该事件或消息,则将其丢弃 3.2事件的传递与响应 3.2.1事件传递 当一个事件发生后,事件会从父控件传给子控件,也就是说由UIApplication -...;如果上级视图仍然无法处理则会继续往上传递;一直传递到视图控制器view controller,首先判断视图控制器的根视图view是否能处理此事件;如果不能则接着判断该视图控制器能否处理此事件,如果还是不能则继续向上传
(也就是touch方法默认不处理事件,只传递事件),将事件交给上一个响应者进行处理 4.2.响应者链条示意图 响应者链条:在iOS程序中无论是最后面的UIWindow还是最前面的某个按钮,它们的摆放是有前后关系的...view的上一个响应者,事件就传递给它的父视图 2>在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理 3>如果window对象也不处理,则其将事件或消息传递给...UIApplication对象 4>如果UIApplication也不能处理该事件或消息,则将其丢弃 事件处理的整个流程总结: 1.触摸屏幕产生触摸事件后,触摸事件会被添加到由UIApplication...首先看initial view能否处理这个事件,如果不能则会将事件传递给其上级视图(inital view的superView);如果上级视图仍然无法处理则会继续往上传递;一直传递到视图控制器view...则继续交给父视图控制器的根视图,如果根视图不能处理则交给父视图控制器处理);一直到 window,如果window还是不能处理此事件则继续交给application处理,如果最后application还是不能处理此事件则将其丢弃
及 文子颜色 等属性; ③ 代码生成按钮 并 绑定事件 ( addTarget ); 13....view 对象, 将这些子控件 按照级别添加到 根节点上; Deployment Info 的其它配置信息 : 1.Deployment Info : 兼容的 iOS 的 最低版本 ; 2.Devices...的方法: 1.界面中设置 View 控件 : 拖入一个 UIView 控件到界面中, 并打开尺寸查看器, 将其大小修改为 300 x 300 , 放置在中心位置; 2.设置View中的子控件按钮及点击事件...将创建的 UIView 添加到 mainView 中去; [self.mainView addSubview:generateView]; //4....将创建的 UIView 添加到 mainView 中去; [self.mainView addSubview:generateView]; //4.
根 View 组件 , 然后将 生成的 UIView 控件添加到 该 根 View 控件中 ; //4....将 控件 添加到 View 中 [self.view addSubview:newView]; } @end ---- ( 2 ) 运行并查看效果 ( 查看 View 层次 ) 运行并查看效果...将 UIButton 添加到 根 View 中 [self.view addSubview:button]; 8.完整代码示例 : // // ViewController.m // 1.GenerateUIViewByCode...将 UIButton 添加到 根 View 中 [self.view addSubview:button]; } //为 生成的 按钮 绑定 点击事件 - (void) bindMethod{...: 将代码添加到 父容器 中 ; //4.
其它三个都是通过对应的控制器类来完成工作,而不是直接构建和管理视图。 ...UIViewController实例负责设置视图的外观和它显示的子视图。 UINavigationController类 1. 导航控制器使用内置动画在视图之间切换; 2....作为弹出回上一级视图控制器的Back按钮是自动产生并处理的,无需用户干预。 3. 可使用popViewControllerAnimated:BOOL弹出当前视图控制器并向左显示前一个视图。 4....或其他任何类型的视图控制器),并通过设置栏的viewControllers属性将其添加到选项卡栏,使每个选项卡对应一个试图控制器。...[MyViewController alloc] init]; // 将创建好的这些视图控制器先添加到一个Array对象中,再将此数组分配给Tab Bar Controller的viewControllers
setNeedsDisplayInRect: 方法以标记该视图(或者它的子视图)需要进行重画 -通知 Controller 有数据变化 如果一个视图的几何结构改变了,UIKit...会更新它的子视图 如果任何视图的任何部分被标记为需要重画,UIKit 会要求视图重画自身 任何已经更新的视图会与应用余下的可视内容组合在一起,同时被发送到图形硬件去显示 图形硬件将已解释内容转化到屏幕上...,以表示后续应该调用 layoutSubviews 方法,以调整当前视图及其子视图的布局。...基本上你不可能只在这个方法里只进行了单个 UIView 的布局修改,而是多项修改,那么 App 会在下一个 View Drawing Cycle 到来时,把这些修改一起执行,这是最正常的情况。...实现方法如下: extension UIButton { func quickButtonAction() { UIView.performWithoutAnimation({
我们可以重写这个方法,对通过nib文件加载的view做一些其他的初始化工作。比如可以移除一些视图,修改约束,加载数据等。...4、viewWillLayoutSubviews 即将开始子视图位置布局 5、ViewDidLayoutSubviews 用于通知视图的位置布局已经完成 6、ViewDidAppear 当viewWillAppear...2、UIWindow的主要作用有: 1.作为UIView的最顶层容器,包含应用显示所有的UIView; 2.传递触摸消息和键盘事件给UIView; 把view添加到uiwindow 3、把view...添加到uiwindow上面 (1)直接将控制器的view添加到UIWindow中,并不理会它对应的控制器 [self.window addsubview:vc.view]; (2)设置uiwindow...的根控制器,自动将rootviewcontroller的view添加到window中,负责管理rootviewcontroller的生命周期 [self.window.rootviewcontroller
页面所属控制器存在自定义的父控制器 例如:一个控制器包含了若干子控制器,且通过 UIScrollView 分页的方式呈现各子控制器的视图。...元素的类型名称 + 索引 以上述按钮为例:它的类型名为 UIButton,索引为其在父视图中的添加顺位。...单一内容本身作为其内容标识。 如果一个元素包含多个文本或图片、或其子元素内也包含文本或图片,则称其内容为复合内容。...", } 其中,key 对应的是子元素相对路径,作为改内容的内容标识,即从当前元素到子元素的路径,value 对应的是该内容具体的文本或图片内容。...前后端配合方式的选择 前端匹配 工作方式 圈选配置由服务端统一下发到 App App 根据圈选配置进行匹配采集,将采集到的用户事件上报服务端 服务端进行数据统计处理,生成报表 优点 App 只上报被圈选匹配的事件
领取专属 10元无门槛券
手把手带您无忧上云