iPhone键盘,完成button和resignFirstResponder

这可能是一个愚蠢的问题,但我无法在文档中find答案。 popup式键盘上的“完成”button是否始终使键盘消失? 我在网上看到了很多代码:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { [theTextField resignFirstResponder]; return YES; } 

当我按下“完成”button时,键盘popup, UITextField退出第一响应者。

我假设按下“完成”button没有用于导致UITextField resignFirstResponder ,但行为改变了一段时间。

我正在debuggingOS 3.0 – 3.1.3

我只用一个UITextField和这个代码做了一个小testing项目

 #import <UIKit/UIKit.h> @interface TextFieldTestViewController : UIViewController <UITextFieldDelegate> { UITextField *textField; } @property (nonatomic, retain) IBOutlet UITextField *textField; @end #import "TextFieldTestViewController.h" @implementation TextFieldTestViewController @synthesize textField; - (void)viewDidLoad { [self.textField setDelegate:self]; [self.textField setReturnKeyType:UIReturnKeyDone]; [self.textField addTarget:self action:@selector(textFieldFinished:) forControlEvents:UIControlEventEditingDidEndOnExit]; [super viewDidLoad]; } - (IBAction)textFieldFinished:(id)sender { // [sender resignFirstResponder]; } - (void)dealloc { [super dealloc]; } @end 

文本字段是一个未经修改的UITextField拖到NIB上,连接了sockets。
加载应用程序后,单击文本字段调出键盘。 按下“完成”button使文本区域失去焦点,并使键盘动起来。 请注意,围绕Web的build议是始终使用[sender resignFirstResponder]但是这个工作没有它。

在Xcode 5.1中

启用完成button

  • 在Storyboard中的UITextField的Attribute Inspector中find“Return Key”字段并select“Done”

按下完成时隐藏键盘

  • 在Storyboard中,使您的ViewController成为UITextField的代表
  • 将此方法添加到您的ViewController

     -(BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } 

从文档(任何版本):

您的应用程序有责任在您select的时候closures键盘。 您可以closures键盘以响应特定的用户操作,例如用户点击用户界面中的特定button。 当用户按下键盘上的“返回”键时,也可以configuration文本字段委托来closures键盘。 要closures键盘,请将resignFirstResponder消息发送到当前是第一个响应者的文本字段。 这样做会导致文本字段对象结束当前编辑会话(通过委托对象的同意)并隐藏键盘。

所以,你必须以某种方式发送resignFirstResponder。 但在处理textFieldShouldReturn:消息的过程中,文本字段可能会失去焦点。 这也会导致键盘消失。

完成button的一行代码: –

 [yourTextField setReturnKeyType:UIReturnKeyDone]; 

并在TextField的valueChanged上添加action方法,

 [yourTextField resignFirstResponder];