以下内容来自《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>