一个界面,有多个UITextField的时候,点击提交按钮发送数据时,取消键盘

来源:互联网 发布:孟加拉语翻译软件 编辑:程序博客网 时间:2024/06/07 08:41

一个界面,有多个UITextField的时候,点击提交按钮发送数据时,取消键盘

我们都知道,UITextField取消键盘用resignFirstResponder,

当一个界面有多个UITextField时,对每个UITextField变量用resignFirstResponder太麻烦了,

可以用转载的下面这篇文章的方法:

转载自:http://my.oschina.net/hmj/blog/100020


UIView之endEditing方法

发表于10个月前(2013-01-05 10:34)   阅读(439) | 评论(0) 2人收藏此文章, 我要收藏
赞0
IOS endEdting

问题

在 《IOS 键盘的显示和关闭》 一篇介绍了键盘的显示与关闭的原理流程性的东西,在关闭如果当前我们正在在textField上输入文本的话,我们只要做如下操作 

1[textField resignFirstResponder]

即可将键盘关闭,但随之问题也就出现了,假如考虑我们现在在应用中包含一了表单模块,要求填完表单之后我们要将数据进行保存,该表单可能包含了十几个UITextField对应的数据 输入项。此外包含了一个“提交”按钮,点击提交数据发送后台的过程中,我们要弹出一个简单的提交等待弹出框告知用户等待。整个流程并不复杂,但是涉及到了一个UI显示细节问题,即: 在用户等待的过程中键盘可能一直处于显示状态,虽然可能被弹出框的遮罩遮住,也许可能有些人不介意,但个人感觉正确正确的显示状态是,在点击提交数据后,紧接着是马上关闭键盘, 然后显示等待弹出框。因此,这涉及到要跟踪当前处于First Responder状态的UITextField对象,好让我们在提交的action中调用其resignFirstResponder方法关闭键盘,这 是我们可能直观上首先想到的问题的解决办法,的确,这也是最直观的。通常在IOS的MVC设计中,一个模块往往会对应一个UIViewController,假设我们的表单提交对应的Controller名为 FormViewController,我们可以用如下代码来简单解释以上处理流程: 

view source
print?
01#import "FormViewController.h"
02 
03@interface FormViewController ()<UITextFieldDelegate>
04 
05@property (weak, nonatomic) IBOutlet UITextField *textFieldA;
06@property (weak, nonatomic) IBOutlet UITextField *textFieldB;
07@property (weak, nonatomic) IBOutlet UITextField *textFieldC;
08@property (weak, nonatomic) IBOutlet UITextField *textFieldD;
09@property (weak, nonatomic) IBOutlet UITextField *textFieldE;
10@property (weak, nonatomic) IBOutlet UITextField *textFieldF;
11@property (weak, nonatomic) IBOutlet UITextField *textFieldG;
12@property (weak, nonatomic) IBOutlet UITextField *textFieldH;
13@property (weak, nonatomic) IBOutlet UITextField *textFieldI;
14 
15@property (weak , nonatomic) UITextField *editingTextField ; // 跟踪当前处于编辑状态的textfield
16 
17@end
18@implementation FormViewController
19@synthesize textFieldA,textFieldB,textFieldC,
20            textFieldD,textFieldE,textFieldF,textFieldG,textFieldH,
21            textFieldI,editingTextField;
22- (void)viewDidLoad
23{
24    [super viewDidLoad];
25    self.textFieldA.delegate = self ;
26    self.textFieldB.delegate = self ;
27    self.textFieldC.delegate = self ;
28    self.textFieldD.delegate = self ;
29    self.textFieldE.delegate = self ;
30    self.textFieldF.delegate = self ;
31    self.textFieldG.delegate = self ;
32    self.textFieldH.delegate = self ;
33    self.textFieldI.delegate = self ;
34     
35}
36- (void)viewDidUnload {
37    [self setTextFieldA:nil];
38    [self setTextFieldB:nil];
39    [self setTextFieldC:nil];
40    [self setTextFieldD:nil];
41    [self setTextFieldE:nil];
42    [self setTextFieldF:nil];
43    [self setTextFieldG:nil];
44    [self setTextFieldH:nil];
45    [self setTextFieldI:nil];
46    [self setEditingTextField:nil];
47    [super viewDidUnload];
48}
49// UITextFieldDelegate 方法
50- (void)textFieldDidBeginEditing:(UITextField *)textField
51{
52    self.editingTextField = textField ;
53}
54// 提交Action
55- (IBAction)submitForm:(UIBarButtonItem *)sender
56{
57    [self.editingTextField resignFirstResponder];
58    // 提交表单,弹出提示等待框,略
59}

这里FormViewController首先实现了UITextFieldDelegate协议,在viewDidLoad的时候,让所有textField的delegate都指向FormViewController,并且添加了editingTextField属性用于保存当前处于编辑状态下的textField对象,具体的跟踪方法是在在textFieldDidBeginEditing:代理方法中实现,这样在submitForm时,我们边可以调用 

1[self.editingTextField resignFirstResponder];

原创粉丝点击