您的位置:首页 > 产品设计 > UI/UE

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

2013-11-19 15:32 381 查看
一个界面,有多个UITextField的时候,点击提交按钮发送数据时,取消键盘

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

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

可以用转载的下面这篇文章的方法:
转载自:http://my.oschina.net/hmj/blog/100020


UIView之endEditing方法


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

赞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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐