iPhone键盘,完成按钮和resignFirstResponder

时间:2010-05-13 17:18:28

标签: iphone objective-c cocoa-touch keyboard uikit

这可能是一个愚蠢的问题,但我在文档中找不到答案。弹出键盘上的“完成”按钮是否总是导致键盘消失?我在网上看到了很多像这样的代码:

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

当我按下“完成”按钮时,键盘会弹出,UITextField会暂停第一响应者。

我认为按下“完成”按钮并不会导致UITextFieldresignFirstResponder,但这种行为会在某个时间发生变化。

我在OS 3.0上调试 - 3.1.3

4 个答案:

答案 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中

启用完成按钮

  • 在故障板中的UITextField的属性检查器中找到字段&#34;返回键&#34;并选择&#34;完成&#34;

按下完成后隐藏键盘

  • 在Storyboard中,使ViewController成为UITextField的委托
  • 将此方法添加到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];