Storyboard中的First Responder初步理解
2014-08-14 12:08
155 查看
http://www.devdiv.com/storyboard_first_responder_-blog-1-50012.html
相信很多开发者看到storyboard中的这个first responder都会有这样的疑问:这个东东是做什么的?
原理讲解:
本文着重给大家讲讲什么是First Responder,我们将通过一个例子讲解它的使用,具体如下:
1. 创建Single View Application工程,命名为:FirstResponderTest
2. 在Storyboard中添加两个Text Field,两个Button
3. 为Paste按钮设置Touch Down event,指向First Responder
在弹出菜单中选择Paste
我们希望在我们点击Paste button时候执行First Responder的paste: action。
4. 接下来在ViewController.h中添加两个Text Field outlet,具体如下:
然后按照下图填写
5. 在ViewController.m中添加以下代码:
6. 在ViewController.m的viewDidLoad中添加:
7. 执行起来跑一跑,点一下Paste按钮,你会发现字符串Hello DevDiv!从Pasteboard中直接复制到textField1中去了
这是因为:
1). Paste button的touch down event调用First Responder的paste: action,
2). 而此时textField1是First Responder,
3). 所以Paste button实际上调用的是textField1的paste: action。
8. 接下来我们为Switch FR button添加touch down event处理,具体代码如下:
代码并不复杂,让两个Text Field轮流担任First Responder。
9. 我们再执行程序,切换First Responder
如果这是点击Paste按钮,那么你会发现,字符串被Copy到不同的Text Field。
总结如下:
1. Storyboard中的First Responder只是一个placeholder,它不是具体指向哪个responder,
2. 如果程序不在乎谁是First Responder,都让First Responder执行某个action(比如这里的paste:),那么我们就可以把event发给First Responder。
相信很多开发者看到storyboard中的这个first responder都会有这样的疑问:这个东东是做什么的?
原理讲解:
本文着重给大家讲讲什么是First Responder,我们将通过一个例子讲解它的使用,具体如下:
1. 创建Single View Application工程,命名为:FirstResponderTest
2. 在Storyboard中添加两个Text Field,两个Button
3. 为Paste按钮设置Touch Down event,指向First Responder
在弹出菜单中选择Paste
我们希望在我们点击Paste button时候执行First Responder的paste: action。
4. 接下来在ViewController.h中添加两个Text Field outlet,具体如下:
然后按照下图填写
5. 在ViewController.m中添加以下代码:
[代码]c#/cpp/oc代码:
1 | @synthesize textField1; |
2 | @synthesize textField2; |
[代码]c#/cpp/oc代码:
01 | NSString *copyString = @"Hello DevDiv!" ; |
02 |
03 | UIPasteboard *pb = [UIPasteboard generalPasteboard]; |
04 |
05 | [pb setString:copyString]; |
06 |
07 |
08 |
09 | // Set first responder |
10 |
11 | [textField1 becomeFirstResponder]; |
这是因为:
1). Paste button的touch down event调用First Responder的paste: action,
2). 而此时textField1是First Responder,
3). 所以Paste button实际上调用的是textField1的paste: action。
8. 接下来我们为Switch FR button添加touch down event处理,具体代码如下:
[代码]c#/cpp/oc代码:
1 | - (IBAction)switchFR:(id)sender { |
2 | if ([textField1 isFirstResponder]){ |
3 | [textField2 becomeFirstResponder]; |
4 | } |
5 | else { |
6 | [textField1 becomeFirstResponder]; |
9. 我们再执行程序,切换First Responder
如果这是点击Paste按钮,那么你会发现,字符串被Copy到不同的Text Field。
总结如下:
1. Storyboard中的First Responder只是一个placeholder,它不是具体指向哪个responder,
2. 如果程序不在乎谁是First Responder,都让First Responder执行某个action(比如这里的paste:),那么我们就可以把event发给First Responder。
相关文章推荐
- 对xib/nib, file's owner, first responder的理解
- 对xib/nib, file's owner, first responder的理解
- 理解xib(nib)、File’s Owner、First Responder、outlet、action等概念
- 理解xib(nib)、File’s Owner、First Responder、outlet、action等概念
- <转>如何理解 File's Owner 与 First Responder
- 对xib/nib, file's owner, first responder的理解
- 如何理解 File's Owner 与 First Responder .
- 理解xib(nib)、File’s Owner、First Responder、outlet、action等概念
- 对xib/nib, file's owner, first responder的理解
- 对xib/nib, file's owner, first responder的理解
- 初步理解JS的事件机制
- 初步理解BroadcastReceiver
- IO初步理解(一)
- 第一篇博文,对C++三种循环的初步理解
- Node.js机制及原理理解初步
- Hessian初步理解
- first responder与小键盘之间的关系
- 我对bgwriter.c 与 guc 关系的初步理解
- iOS开发——响应链(Responder Chain)的深入理解和代码示例
- 关于web前端的初步理解