首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UI篇-UIResponder之事件传递和响应精析

响应者链:由一系列“下一个响应者”组成 其顺序如下: 1.iOS系统在处理事件时,通过UIApplication对象和每个UIWindow对象的sendEvent:方法将事件以消息的形式分发给具体处理此事件的第一响应者...如果第一响应者没有进行处理,第一响应者将事件将处理事件的责任传递给下一个,更高级的对象,即当前responder对象的nextResponder。...3.类似地,视图层次中的每个后续视图如果不处理事件都首先传递给它的视图控制器(如果有的话),然后是它的父视图。 4.最上层的容器视图将事件传递给UIWindow对象。...5.UIWindow对象将事件传递给UIApplication单件对象。 6.如果应用程序找不到能够处理事件的响应者对象,则丢弃该事件。 程序寻找能够处理事件的对象,事件就在响应者链中向上传递。 ?...,pointInside的返回值直接影响到touchesEnded的调用,如果返回NO是不会调用touchesEnded事件的。

2.5K30

iOS开发之城市选择器

城市选择器,借助于UIPickerView来实现,第一列为省份,第二列为第一列省份对应的城市或者区,数据放在plist中,plist结构如下图所示,第一层是一个Dictionary,每个省份对应的城市是一个...plist.png 实现步骤 第一步 拖入一个UIPickerView到StoryBoard中,然后设置UIPickerViewDelegate,和UIPickerViewDataSource为当前的控制器...设置数据源与代理.png 第二步 在对应的ViewController中进行实现,代码注释非常详细 #import "ViewController.h" @interface ViewController...*/ - (NSArray*)provinces { if (_provinces == nil) { //将省份保存到数组中 但是字典保存的是无序的 所以读出来的省份也是无序的...= self.provinces[row]; //重新加载第二列的数据 [pickerView reloadComponent:1]; //让第二列归位

2.1K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS 链式语法数据绑定轻量级框架实践

    1、现状 当前组件化开发中,经常会用到MVVM设计模式,它促进了UI代码与业务逻辑的分离,一定程度解决viewController臃肿问题,但也使得数据绑定变得复杂,很多情况下需要我们手动绑定数据和刷新界面...它的特殊在于其本身可以帮助方法进行参数传递,并返回数据,这样我们便可以让方法不断返回实例本身,继续调用实例方法。...数据inout的形式有:普通对象如target.property = value;UI对象如textField.text响应EditingChanged等等。...2)、有时候 A 与 B 双向绑定,B 与 C 双向绑定,其实相当于 A、B、C 一起绑定在一条数据链Chain上,每当有一个in数据变化,发送新数据到C hain上,再由Chain更新所有的out数据...(ViewController)中进行,具体可结合自身设计模式灵活运用。

    1.3K30

    iOS开发之UITableView联动实现城市选择器

    在 iOS开发之城市选择器一文中用两列的UIPickerView实现了城市选择器,今天用两个UITableView来实现一下,首先这种联动在很多地方用得上,而且方法有好几种,我这里选择了个人喜欢的一种方式...这种方式总体思路如下: 1、添加两个UITableView到当前控制器中,分别设置它们的的尺寸,然后拖线到控制器中 2、左边的表格设置数据源和代理为当前控制器,然后显示数据,右边的表格也设置数据源为当前控制器...3、监听左边表格控制器的点击事件,在它的点击事件中刷新右边的表格 这时候就有问题了,一个控制器要成为2个UITableView的数据源和代理,怎么办?...,设置数据源和代理,拖线到控制器,添加plist文件(和之前文中的一样,就不贴图了)。...*/ - (NSArray*)provinces { if (_provinces == nil) { //将省份保存到数组中 但是字典保存的是无序的 所以读出来的省份也是无序的

    2.2K60

    iOS开发 —— Swift版地址选择器

    构建思路 刚开始领导丢给我了一个数据库包含着中国地区的省市区关系,但是以前处理这个问题常用Plist文件来搞定,所以我也就偷懒懒得再去写Sql语句了,直接用一个Plist文件来处理。...之前OC写的很多省市选择器,都是封装的不够完善,直接调用存在很多问题。并且在处理省市联动的问题上,常常是通过拆分省市区为三个数组,当其中一个数据变化时,再根据 index来处理之后的数据联动。...首先把UIPickerView这个类的两个代理方法在自己的类里实现,以后调用的时候不用再去实现UIPickerView的两个Delegate Method,之后我们再提供一个协议,用最简单的方式来完成数据的获取...至于省市区的结构,我们用结构体来处理,将省市区写成两个Struct,再之后就是简单的数据处理了。将数据加载并且传入这个Struct中。...class ViewController: UIViewController, LixAreaPickerDelegate { @IBOutlet weak var dataLabel: UILabel

    1.7K20

    在 Xamarin.iOS 项目中访问 ArcGIS 云端专题数据图层

    ArcGIS API 提供的专题图层 (AGSFeatureLayer) 可以用来访问并编辑矢量地图数据, 它依赖于 ArcGIS 服务器专题服务 (Feature Service) , 专题服务不仅可以浏览和编辑数据...将图层添加到地图上之后, 你需要使用自定义符号将图层的数据在地图上显示成蓝色的小圆点。...显示选中的专题数据 我们现在来完成高亮显示属于用户选择的国家的数据。...首先得到的是用户选择的国家, 如果用户选择了 None 的话, 清空专题图层选中的数据; 否则, 使用类似于 SQL 的语法 COUNTRY = 来选中专题图层的数据...不过在进行选中操作之前, 需要设置专题图层选中数据的符号, 比如设置选中的数据在地图上显示为红色的原点; 同时还需要设置图层的 queryDelegate , 实现 AGSFeatureLayerQueryDelegate

    1.5K20

    【IOS 开发】基本 UI 控件详解 (UIDatePicker | UIPickerView | UIStepper | UIWebView | UIToolBar )

    数据设置方法 :  -- 设置数据 : UIPickerView 对象可以设置一个 UIPickerViewDataSource 对象, 用于数据管理; -- "numberOfComponentsInPickerView...单行选择器示例 (1) 相关 API 简介 相关 API 简介 :  -- 为 UIPickerView 设置 数据 和 操作 委托 :  //为 UIPickerView 设置 UIPickerViewDataSource...//将当前选中的列 设置到类变量中 selectedRail = row; //重新加载 第二列 [self.pickerView reloadComponent...NSUInteger randomNum = arc4random() % icons.count; //将随机数设置给 UIPickerView 的 四列 中的每行选项...)component reusingView:(UIView *)view{ /* 这里注意 重用 View 的 tag, 我们将 View 的 tag 设置为1,

    4.9K40

    Cocoa编程中视图控制器与视图类详解

    UITableViewCell类的表格单元项) UIPickerView 各种栏样式: UINavigationBar (对于导航栏有一个UINavigationItem类的导航项) UITabBar...•管理视图上显示的数据。 •设备方向变化,调整视图大小以适应屏幕。 •负责视图和模型之间的数据及请示的传递。 2....• –viewDidLoad:当加载控制器的视图到内存时,该方法被调用。...事件处理 如图所示,一般情况下,当一个视图不响应用户事件时,它会将事件传递给它的父视图。但是,当视图被视图控制器管理时,它会将事件首先传递给视图控制器。...如果视图控制器也不处理该事件,则视图控制器会将数据传递给视图控制器视图的超类,一般是UIWindow.

    5.1K50

    iOS流布局UICollectionView系列六——将布局从平面应用到空间

    iOS流布局UICollectionView系列六——将布局从平面应用到空间 一、引言         前面,我们将布局由线性的瀑布流布局扩展到了圆环布局,这使我们使用UICollectionView的布局思路大大迈进了一步...iOS系统的控件中,也并非没有这样的先例,UIPickerView就是很好的一个实例,这篇博客,我们就通过使用UICollectionView实现一个类似系统的UIPickerView的布局视图,来体会...的布局属性,后面我们会了解到。        ...在编写我们的布局类之前,先做好准备工作,在viewController中,实现如下代码: - (void)viewDidLoad {     [super viewDidLoad];     // Do...,上面的逻辑刚好可以无缝对接,但是会有新的问题,一开始运行,滚轮就是出现在最后一个item的位置,而不是第一个,并且有些相关的地方,我们也需要一些适配: 在viewController中: //一开始将

    1.4K20

    iOS学习——UIPickerView的实现年月选择器

    因此,为了满足项目需求,自己用UIPickerView写了一个只显示年月的选择器界面,同时还可以控制我们的显示的最小时间。当然,如果要控制其他内容也都是可以的,无非就是在数据处理上多一些处理和控制。...,包括我们的选择器的标题,取消、确定按钮,蒙层等大框架的布局,然后是子类在基类的基础上添加UIPickerView来实现选择器的基本功能以及数据加载和显示。...如果直接在蒙层上添加弹出式图作为子视图的话,我们的布局相对会简单很多,这里涉及到一点就是子视图的透明度是和父视图保持一致的,如果直接将弹出视图加载到蒙层遮罩视图上,会导致弹出视图的透明度也为0.3,所以弹出视图不能直接加在蒙层遮罩视图上...UIPickerView的用法,UIPickerView其实和UITableView很类似,在初始化的时候需要设置其数据代理和视图代理(UIPickerViewDelegate,UIPickerViewDataSource...下面主要就是说一下如何获取年月这样的数据,主要是用到了NSDateComponents 的直接获取一个月前的信息,然后通过将NSCalendar将NSDateComponents转化为日期Date,最后将

    4.6K130

    Mac开发跬步积累(六): 响应链NSResponder Chain

    (也就是它的下一个响应者对象)....对于键盘事件, 响应是从窗口的第一响应者开始; 对于鼠标/触控板事件,响应是从用户操作的view开始; 如果事件消息在最初没有响应,那么响应链将按照视图的层级结构依次传递消息,直到窗口对象(NSWindow...响应链图 根据前文Event Message中讲到的鼠标/触控板事件是从用户操作的View开始,由于ViewController的View没有实现mouseDown:响应事件,所以响应链会将事件接着传递给...View的下一个响应者(就是ViewController),因此我们可以看到正常信息输出; ?...window first responder 由此可知,如果需要ViewController响应键盘事件,我们需要告知NSWindow对象,它的下一个响应者是ViewController即可.代码如下

    2.4K10

    【IOS开发基础系列】数据持久化专题

    - (id) initWithCoder: (NSCoder*)aDecoder,是将文件中数据读入到对象中。...SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。...嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行。SQLite 的数据库权限只依赖于文件系统,没有用户帐户的概念。...SQLite支持常见的数据类型, 如: 4.3 在iOS中使用SQLite3         为了能够在iOS中使用SQLite3需要是将libsqlite3.dylib类库添加到Xcode工程中,在工程的...= SQLITE_OK          sqlite3_open打开数据库,注意:在sqlite3中的函数都是使用C字符串[self dataFilePath] UTF8String]是将NSString

    36320

    微信支付的跨平台架构到底有多牛?

    和刚才基于 MVC 混乱的架构相比: 业务流程的代码能够聚合到 UseCase 中,而不是分散到原来 iOS, 安卓的各个 ViewController,Activity 中。...路由机制的核心思想,就是通过向路由传递数据,然后路由解析数据,并响应。 结合微信支付和网络密切相关的特点。创新地将支付领域模型作为传递的数据。 ? 那么怎么建立这个支付领域模型的呢?...规范数据传递 iOS 和安卓的旧架构都存在信息传递不当和数据污染问题。这个问题最严重。iOS 和 安卓都出过不少 bug。...具体原因就是: 进入支付首页时,后台返回了数据,然后被写入到一个公共的 Model. 然后进入钱包页,再进入零钱页。这个公共 model 一路被传递过去。...去掉公共读写的数据类型 传递值类型(Value Type)的数据, 后面流程修改数据时,不影响前面的流程。 单向传递数据,只依赖注入必要数据。 如果数据修改需要通知前序流程,使用代理模式通讯。

    1.2K10

    史上最全的iOS之访问自定义cell的textField.text的N种方法

    textField.text 通过系统默认发送的通知来拿到每一个cell内textField.text 通过自定义的通知来拿到每一个cell内textField.text 通过block来拿到每一个cell...,userInfoValue); // 如果涉及到多个section,可以使用二维数组,此处不再赘述 if (textField.indexPath.section == 0) {...此时如果我们采用监听系统自带的通知的方法,就有可能监听到我们不需要的改变从而影响了业务数据。...作为block的参数传进去 4>数据源方法cellForRowAtIndexPath:中对cell的block属性赋值(也就是拿到cell.contentTextField.text) 5>数据源方法...作为协议方法的参数传进去 4>数据源方法cellForRowAtIndexPath:中对cell的indexPath赋值为当前的indexPath。

    6.8K40

    微信支付的架构到底有多牛?

    那么 ViewController 得不到复用,更致命的是业务流程的代码非常不清晰,业务流程的代码都被分散到各个 Controller 中, 而一个 Controller 又可能耦合了多个业务的代码。...和刚才基于 MVC 混乱的架构相比: 业务流程的代码能够聚合到 UseCase 中,而不是分散到原来 iOS,安卓的各个 ViewController,Activity 中。...结合微信支付和网络密切相关的特点。创新地将支付领域模型作为传递的数据。 那么怎么建立这个支付领域模型的呢?建模,就是建立映射。领域知识+建模方法=领域建模。...具体原因就是: 进入支付首页时,后台返回了数据,然后被写入到一个公共的 Model。 然后进入钱包页,再进入零钱页。这个公共 Model 一路被传递过去。...单向传递数据,只依赖注入必要数据。 如果数据修改需要通知前序流程,使用代理模式通讯。 规范数据传递后,对比旧架构: 从架构上根本解决了困扰微信支付已久的数据污染的问题。

    89810

    微信支付跨平台软件架构

    那么 ViewController 得不到复用,更致命的是业务流程的代码非常不清晰,业务流程的代码都被分散到各个 Controller 中, 而一个 Controller 又可能耦合了多个业务的代码。...和刚才基于 MVC 混乱的架构相比,UseCase具有如下优点: 业务流程的代码能够聚合到 UseCase 中,而不是分散到原来 iOS, 安卓的各个 ViewController,Activity 中...路由机制的核心思想,就是通过向路由传递数据,然后路由解析数据并响应。结合微信支付和网络密切相关的特点,创新地将支付领域模型作为传递的数据。 那么怎么建立这个支付领域模型的呢?...经过排查,具体原因就是: 进入支付首页时,后台返回了数据,然后被写入到一个公共的 Model. 然后进入钱包页,再进入零钱页。这个公共 model 一路被传递过去。...去掉公共读写的数据类型 传递值类型(Value Type)的数据, 后面流程修改数据时,不影响前面的流程。 单向传递数据,只依赖注入必要数据。 如果数据修改需要通知前序流程,使用代理模式通讯。

    2K20

    【iOS面试粮食】内存管理

    本文章将记录Objective-C中内存管理的相关资料,如有错误欢迎指出~ iOS的内存管理一般指的是OC对象的内存管理,因为OC对象分配在堆内存,堆内存需要程序员自己去动态分配和回收;基础数据类型(...该对象就会一直占用其分配在堆内存的空间,就会导致内存泄露。内存泄露到一定程度有可能导致内存溢出,进而导致程序崩溃。...非自己持有的对象无法释放。 从上面的思想来看,我们对对象的操作可以分为三种:创建,持有,释放,再加上废弃,一共有四种。...因为对象 A 的销毁依赖于对象 B 销毁,而对象 B 的销毁与依赖于对象 A 的销毁,这样就造成了我们称之为循环引用(Reference Cycle)的问题 这两个对象即使在外界已经没有任何指针能够访问到它们了...,它们也无法被释放。

    54400
    领券