- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章解析iOS开发中的FirstResponder第一响应对象由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1. UIResonder 。
对于C#里所有的控件(例如TextBox),都继承于Control类。而Control类的继承关系如 下:
System.Object 。
。
System.MarshalByRefObject 。
System.ComponentModel.Component 。
System.Windows.Forms.Control 。
对于iOS里的UI类,也有类似的继承关系.
。
例如对于UITextField,继承于UIControl;UIControl继承于UIView,UIView继承于UIRe sponder,UIResponder继承于NSObject.
具体架构可以参见:
http://developer.apple.com/library/ios/#documentation/general/conceptual/Devp edia-CocoaApp/Responder.html UIResponder是UIKit框架中的类(Mac OS X Cocoa对应的是AppKit框架).
。
2. 第一响应对象 。
在应用的响应对象里,会有一个成为第一响应对象.
第一响应对象和其他响应对象之间有什么区别?对于普通的触摸事件没什么区别。就算 我把一个按钮设置成第一响应对象,当我点击其他按钮时,还是会响应其他按钮,而不 会优先响应第一响应对象.
第一响应对象的区别在于负责处理那些和屏幕位置无关的事件,例如摇动.
苹果官方文档的说法是:第一响应对象是窗口中,应用程序认为最适合处理事件的对象 .
一个班只能有一个班长,应用的响应对象中,只能有一个响应对象成为第一响应对象.
。
3. 成为与取消第一响应对象.
要当第一响应对象,还需要有View来毛遂自荐:
。
如果缺少了这段,就算用[view becomeFirstResponder]也不能让一个view成为第一响应 对象。。。强扭的瓜不甜?好吧不是这个原因。大多数视图默认只关心与自己有关联的 事件,并且(几乎)总是有机会来处理这些事件。以UIButton为例,当用户单击某个UIB utton对象时,无论当前的第一响应对象是哪个视图,该对象都会收到指定的动作消息。 当上第一响应对象吃力不讨好么。。。所以只能由某个UIResponder明确表示自己愿意成 为第一响应对象才行。(我不知道设计上是基于什么考虑。。。安全?) 。
。
在当上第一响应对象时,不同对象可能会有一些特殊的表现。例如UITextField当上的时 候,就会调出一块小键盘.
第一响应对象也有可能被辞退。发送一个resignFirstResponder,就可以劝退.
。
4. 第一响应对象的任务 。
刚才说了第一响应对象可以处理摇动。就来看个范例吧:
。
。
当摇动开始时触发某些行为.
。
5. 获取当前第一响应对象 。
源自这篇讨论:http://stackoverflow.com/questions/1823317/get-the-current-firs t-responder-without-using-a-private-api 。
提问的家伙用了如下的方式来获取 。
结果被苹果打回来,说用了非公开的API。。.
。
于是这家伙只好苦逼地用递归了:
。
6.View的FirstResponder的释放问题 今天遇到一个问题,当我隐藏掉一个正在接受用户输入的UITextField的时候,键盘并不会消失,而且键盘仍然接受用户输入,再次显示该TextField时候发现在隐藏状态下,所有的输入仍然传输到了该TextField中,于是查下官方资料找到如下解释: Important If you hide a view that is currently the first responder, the view does not automatically resign its first responder status. Events targeted at the first responder are still delivered to the hidden view. To prevent this from happening, you should force your view to resign the first responder status when you hide it. 意思是如果这个View是当前的第一响应者的时候,隐藏该View并不会自动放弃其第一响应者的身份,而且会继续以第一响应者的身份接受消息。我们可以通过在隐藏View之前,手动调用resignFirstResponder来强制该view放弃第一响应者身份。 下面请看小例子:
SvTestFirstResponder.h 。
。
// // SvTestFirstResponder.h // // Created by maple on 3/15/12. // Copyright (c) 2012 SmileEvday. All rights reserved. // // 当一个view时当前响应者时,调用其hidden方法并不会自动放弃第一响应者身份,所有的消息仍然会发送到这个view // 可以通过在hidden前强制放弃第一响应者,恢复正常的消息传递 // 。
#import <UIKit/UIKit.h> 。
。
@interface SvTestFirstResponder : UIView { UITextField *_inputField; } 。
@end 。
。
SvTestFirstResponder.m 。
。
// // SvTestFirstResponder.m // // Created by maple on 3/15/12. // Copyright (c) 2012 SmileEvday. All rights reserved. // 。
#import "SvTestFirstResponder.h" 。
@interface SvTestFirstResponder() 。
- (void)hiddenInputView:(id)sender; - (void)showInputView:(id)sender,
@end 。
@implementation SvTestFirstResponder 。
- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code _inputField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; _inputField.center = CGPointMake(160, 50); [_inputField setFont:[UIFont systemFontOfSize:24]]; _inputField.text = @"input you text"; _inputField.clearsOnBeginEditing = YES; _inputField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; _inputField.borderStyle = UITextBorderStyleRoundedRect; [self addSubview:_inputField]; _inputField.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; UIButton *hiddenBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; hiddenBtn.frame = CGRectMake(0, 0, 115, 40); hiddenBtn.center = CGPointMake(80, 110); [hiddenBtn setTitle:@"Hide TextField" forState:UIControlStateNormal]; [hiddenBtn addTarget:self action:@selector(hiddenInputView:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:hiddenBtn]; hiddenBtn.autoresizingMask = UIViewAutoresizingFlexibleRightMargin; hiddenBtn.titleLabel.lineBreakMode = UILineBreakModeTailTruncation; UIButton *showBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; showBtn.frame = CGRectMake(0, 0, 115, 40); showBtn.center = CGPointMake(240, 110); [showBtn setTitle:@"Show TextField" forState:UIControlStateNormal]; [showBtn addTarget:self action:@selector(showInputView:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:showBtn]; showBtn.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; showBtn.titleLabel.lineBreakMode = UILineBreakModeTailTruncation; } return self; } 。
/* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ 。
- (void)hiddenInputView:(id)sender { _inputField.hidden = YES; } 。
- (void)showInputView:(id)sender { _inputField.hidden = NO; } 。
@end 。
。
这个简单的例子中,当输入框进入接受用户输入状态的时候,点击hide按钮,键盘并不会消失而且会继续接收用户输入并且将用户输入传到TextField中去,后面再点击Show按钮的时候你会发现所有在隐藏状态下输入的文字都已经成功的被接收。我们可以修改hide方法如下: 。
- (void)hiddenInputView:(id)sender 。
。
{ 。
if (_inputField.isFirstResponder) { 。
[_inputField resignFirstResponder],
} 。
_inputField.hidden = YES,
} 。
。
这样就可以在隐藏之前强制释放第一响应者身份,这个问题比较细节,但有时候可能就是这种细节问题导致一些莫名奇妙的问题,在隐藏一些可能成为第一响应者的view之前添加强制释放第一响应者身份,可能会帮我们避免一些奇怪的问题,而且也几乎不会有什么开销,何乐而不为呢.
最后此篇关于解析iOS开发中的FirstResponder第一响应对象的文章就讲到这里了,如果你想了解更多关于解析iOS开发中的FirstResponder第一响应对象的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我一直在使用 AJAX 从我正在创建的网络服务中解析 JSON 数组时遇到问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的网络服务返回的结果。 尽管知道我的数据库查
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在尝试运行 Android 应用程序时遇到问题并收到以下错误 java.lang.NoClassDefFoundError: com.parse.Parse 当我尝试运行该应用时。 最佳答案 在这
有什么办法可以防止etree在解析HTML内容时解析HTML实体吗? html = etree.HTML('&') html.find('.//body').text 这给了我 '&' 但我想
我有一个有点疯狂的例子,但对于那些 JavaScript 函数作用域专家来说,它看起来是一个很好的练习: (function (global) { // our module number one
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我需要编写一个脚本来获取链接并解析链接页面的 HTML 以提取标题和其他一些数据,例如可能是简短的描述,就像您链接到 Facebook 上的内容一样。 当用户向站点添加链接时将调用它,因此在客户端启动
在 VS Code 中本地开发时,包解析为 C:/Users//AppData/Local/Microsoft/TypeScript/3.5/node_modules/@types//index而不是
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我被赋予了将一种语言“翻译”成另一种语言的工作。对于使用正则表达式的简单逐行方法来说,源代码过于灵活(复杂)。我在哪里可以了解更多关于词法分析和解析器的信息? 最佳答案 如果你想对这个主题产生“情绪化
您好,我在解析此文本时遇到问题 { { { {[system1];1;1;0.612509325}; {[system2];1;
我正在为 adobe after effects 在 extendscript 中编写一些代码,最终变成了 javascript。 我有一个数组,我想只搜索单词“assemble”并返回整个 jc3_
我有这段代码: $(document).ready(function() { // }); 问题:FB_RequireFeatures block 外部的代码先于其内部的代码执行。因此 who
背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host,这样省掉了些
1.首先贴上我试验成功的代码 复制代码 代码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 X
【PHP代码】 复制代码 代码如下: $stmt = mssql_init('P__Global_Test', $conn) or die("initialize sto
在SQL查询分析器执行以下代码就可以了。 复制代码代码如下: declare @t varchar(255),@c varchar(255) declare table_cursor curs
前言 最近练习了一些前端算法题,现在做个总结,以下题目都是个人写法,并不是标准答案,如有错误欢迎指出,有对某道题有新的想法的友友也可以在评论区发表想法,互相学习🤭 题目 题目一: 二维数组中的
我是一名优秀的程序员,十分优秀!