在iOS中textFieldShouldReturn未被调用

34
我们正在努力弄清如何隐藏键盘,但我们在获取 textFieldShouldReturn 触发方面遇到了问题。为什么?
这是已经完成的内容:
*.h
@interface MultiSalesViewController : UIViewController <UITextFieldDelegate>

*.c

txtCardNumber.delegate = self;

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

此外,textField 在 Interface Builder 中将其委托设置为文件所有者。一个奇怪的事情是,viewController的 - (void)textFieldDidEndEditing:(UITextField *)textField 方法正常工作。

如何让键盘隐藏起来?


3
我不知道你可以把Objective-C代码放在*.c文件中并且它能正常工作! - james
哈哈,肯定是 .m 吧? - ingh.am
10个回答

81

我曾经遇到过完全相同的问题,原因是我忘记在界面构建器中将文本字段的委托设置为“文件所有者”。


28

我曾经遇到同样的问题,正如Warren Crowther建议的那样,我通过按住CTRL键并从文本框拖动到“文件所有者”标签的方式解决了它。

(天啊,有时候我真想念Visual Studio...!!)

输入图像描述

(抱歉重复已经说过的话,但我认为屏幕截图可能会有用!)


12

我设置好了代理,但是我使用了UITextView而不是UITextfield...

也许这会帮助一些人解决未触发代理方法的问题。


1
+1 对于能够帮助某人解决边缘情况的建议。 - Paul Cezanne
1
非常感谢您,因为这正是我遇到的问题。唉。 - TMc
它是否仍然可以与UITextView一起工作? - jesses.co.tt
1
UITextView:https://dev59.com/questions/jHRB5IYBdhLWcg3wJkhC - pkamb

10

我看到你在代码中加入了这行,但是为了方便以后的访问者,请将以下代码添加到你的代码中:

yourTextField.delegate = self;


6

我想你正在使用xib。如果是这样,您还需要在那里设置代理。在xib中右键单击您的UITextfiled,您将看到代理选项,请将其拖到您的文件所有者上。


3
请确保您的MultiSalesViewController实现了UITextFieldDelegate协议: @interface MultiSalesViewController : UIViewController <UITextFieldDelegate> 尝试在[textField resignFirstResponder];之后添加[self becomeFirstResponder];
编辑: 另一个想法...您的UITextField是否为returnKeyType设置了值? txtCardNumber.returnKeyType = UIReturnKeyDone; 我不确定这是否必须设置才能使函数起作用。

2
现在,尽管视图控制器实现了UITextFieldDelegate,textFieldShouldReturn回调根本没有触发。这很奇怪,因为textFieldDidEndEditing回调是可以触发的。这似乎很奇怪,因为两者都作为UITextFieldDelegate的一部分定义。所以,我的问题是为什么一个会触发而另一个不会? - iPhone Developer

3
以下是Mike Gledhill和Warren Crowther更新的答案,附有Xcode 5屏幕截图。
(要设置UITextField委托,请按住Ctrl键并从UITextField拖动到下面显示的“File's Owner”黄色按钮。如果未设置UITextField委托,则textFieldShouldReturn方法永远不会被调用。) enter image description here

2

我已经把一切都正确地连接好了,但 - (BOOL)textFieldShouldReturn:(UITextField *)textField 仍然没有被调用!

作为解决方法,我配置了一个方法在“EditingDidEnd”时触发:

enter image description here


1

前往连接检查器,将委托连接到视图控制器。就这样。


0

使其正常工作的检查清单:

  • 您是否将控制器设置为UITextField实例的代理

  • 确保控制器不会被解除分配,可以通过分配到属性(自动释放)或显式保留来实现。


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