如何在iPhone模拟器中隐藏键盘

22
我在我的 iPhone 应用程序中有一个文本输入框,当你在模拟器中点击它时,键盘就弹出了。但是没有办法将其关闭。
其他网页提供了解决方案,但没有解释为什么它们会起作用,而且对我也不起作用。
其中一个说将文本框的委托设置为您的 UIView,然后在对象上调用 resignfirstresponder,但它从未被调用。
有什么建议吗?有人能解释一下实际发生了什么吗?如果我知道设计范式是什么,我可以自己找出答案...
也许我应该只是放一个“前往”按钮,这样我就有东西可以将焦点从文本字段移开?
4个回答

19

一种方法是将一个对象设置为文本字段的委托,并实现相关协议方法

- (BOOL)textFieldShouldReturn:(UITextField *)textField

当你调用[textField resignFirstResponder]时,这将导致键盘在用户按下return/go/done按钮(无论你将右下角键盘键设置为什么)时消失。

有关更多信息,请参阅UITextFieldDelegate参考文档。


1
刚开始学的时候,我发现“你的第一个iOS应用程序”教程很有帮助。有关更多信息,请参见"实现视图控制器"中的子部分“文本字段的代理”。 - sage
1
足够简单,但为什么不是默认行为呢?这样做虽然有效...按照上述方式实现接口,并将“delegate”连接到文件所有者。 - Bobby
我应该用我的文本字段名称 [myTextField resignFirstResponder] 替换 [textField resignFirstResponder] 吗?但是在 Xcode 4.2 上无论哪种方式都无法使其工作。 - raffian
5
我非常生气这个不是默认设置。 - Danny

16

你可以使用TextField代理来关闭键盘。

要使用这个方法,请按照以下步骤进行...
1. 在您的viewController.h文件中添加委托声明,如下所示:

@interface ViewController : UIViewController <strong><code><UITextFieldDelegate></code></strong> {
    }
在你的 viewController.m 中调用这个方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
3. 然后编写以下代码:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
    }
4. 最后一步是设置textField的代理:
- (void)viewDidLoad {
        [super viewDidLoad];
        self.textField.delegate = self;
    }


是的,应该这样做... 无论如何,如果您想仅将委托应用于某些文本字段,在textFieldShouldReturn:方法中将[textField resignFirstResponder];更改为[yourTextField resignFirstResponder]; - matteodv
无法让它工作,已经尝试了一切,甚至在ViewController的initWithNibName中添加了myTextField.delegate = self,但是委托从未被调用。 - raffian

5

- (BOOL)textFieldShouldReturn:(UITextField *)textField 在你的代理中被调用,当按下回车按钮时。

你需要调用[textField resignFirstResponder],然后返回YES。这应该可以解决问题。还要确保代理已经设置。如有疑问,请添加断点或NSLog进行验证。


0
您可以直接输入以下内容:
textfield.endEditing(true)

其中textfield是您的UITextField的名称。


所以我想指出11年前我已经解决了这个问题可能有点傻吧? :-) - stu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接