这可能是一个愚蠢的问题,但我在文档中找不到答案。弹出键盘上的“完成”按钮是否总是导致键盘消失?我在网上看到了很多像这样的代码:
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
[theTextField resignFirstResponder];
return YES;
}
当我按下“完成”按钮时,键盘会弹出,UITextField
会暂停第一响应者。
我认为按下“完成”按钮并不会导致UITextField
到resignFirstResponder
,但这种行为会在某个时间发生变化。
我在OS 3.0上调试 - 3.1.3
答案 0 :(得分:91)
我用一个UITextField和这段代码做了一个小测试项目
#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上,连接了插座
加载应用程序后,单击文本字段会显示键盘。按“完成”按钮使文本字段失去焦点并激活键盘。请注意,网络上的建议是始终使用[sender resignFirstResponder]
,但这样做没有它。
答案 1 :(得分:15)
在Xcode 5.1中
启用完成按钮
按下完成后隐藏键盘
将此方法添加到ViewController
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
答案 2 :(得分:6)
从文档(任何版本):
这是你的应用程序 解雇键盘的责任 在您选择的时候。您 可能会拒绝键盘作为回应 到特定的用户操作,例如 用户点击特定按钮 你的用户界面。你也可以 配置文本字段委托 当用户关闭键盘时 按下“返回”键 键盘本身。解雇 键盘,发送 resignFirstResponder消息给 当前第一个的文本字段 响应者。这样做会导致文本 字段对象结束当前 编辑会话(与代表 对象的同意)并隐藏 键盘。
所以,你必须以某种方式发送resignFirstResponder。但是,在处理textFieldShouldReturn:message时,textfield可能会失去其他方式。这也会导致键盘消失。
答案 3 :(得分:2)
完成按钮的一行代码: -
[yourTextField setReturnKeyType:UIReturnKeyDone];
在TextField的valueChanged上添加action方法并添加此行 -
[yourTextField resignFirstResponder];