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

一个界面,有多个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 键盘的显示和关闭》  一篇介绍了键盘的显示与关闭的原理流程性的东西,在关闭如果当前我们正在在textField上输入文本的话,我们只要做如下操作 

1 [textField resignFirstResponder]

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

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];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值