以下内容来自《iOS开发指南(第3版)》关东升 著
以对TextField和TextView操作为例:
键盘的打开
要实现键盘的打开,就要在视图控制器ViewController的代码中实现UITextFieldDelegate和UITextViewDelegate委托的协议,相关代码如下:
<span style="font-size:18px;">//在ViewController.h中实现委托协议 #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITextFieldDelegate,UITextViewDelegate> @end</span>
<span style="font-size:18px;">//在ViewController.m中实现委托协议 #import "ViewController.h" @interface ViewController ()<UITextFieldDelegate,UITextViewDelegate> @end</span>
我们还需要讲委托对象ViewController分配给TextView和TextField空间的委托属性delegate
在Interface Builder设计器中打开故事版文件,右键TextField控件,弹出的快捷菜单,用鼠标拖拽Outlets->delegate后面的小圆点道左边的View Controller上,TextView控件操作相同。
键盘的关闭
要想放弃“第一响应者”身份,需要调用UIResponder类中的resignFirstResponder方法,此方法一般在点击键盘的return键或者是背景视图时触发,本例采用点击return键关闭键盘的方式。要实现这个操作,可以利用TextField和TextView的委托协议实现。相关的实现代码是在ViewController文件中,具体如下所示:
<span style="font-size:18px;">@implementation ViewController #pragma mark - UITextField Delegate Method //通过委托来放弃“第一响应者” -(BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } #pragma mark - UITextView Delegate Method //通过委托来放弃“第一响应者” -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } return YES; }</span><span style="font-size:14px;"> </span>