textFieldShouldReturn不起作用(在XCode 4上使用故事板)

我有一个button和一个文本框。 点击button时,我只想让键盘消失。 为什么我的代码不起作用。

更新:我看到了一些关于文件的所有者。 我不明白如何在XCode4中做到这一点我使用故事板,我看不到任何文件所有者的图标。

更新2:我发现一个tut http://www.techotopia.com/index.php/Writing_iOS_4_Code_to_Hide_the_iPhone_Keyboard_%28Xcode_4%29,但它使用XCode 4上的XIB文件而不是故事板。 如何与故事板做到这一点?

myViewController.h

@interface myViewController : UIViewController <UITextFieldDelegate> { UITextField *myTextField; } @property (retain, nonatomic) IBOutlet UITextField *myTextField; 

myViewController.m

 - (BOOL)textFieldShouldReturn: (UITextField *)textField { [textField resignFirstResponder]; return YES; } - (void)viewDidLoad { [super viewDidLoad]; myTextField.delegate = self; } - (IBAction)DoCalc:(id)sender { // ... } 

检查你写入myViewController.m的textFieldShouldReturn函数是否被调用。 在里面设置一个断点,然后运行模拟器。 按下键盘上的返回键。 如果程序没有中断,那么你写的函数没有被调用。

如果是这样,这是因为您没有将UIResponder职责委托给您的视图控制器。 确保你正在为你正在使用的UITextField的myViewController类委托Responder职责。

在故事板中,通过控制 – 从UITextField小部件拖动到场景下面的黄色圆圈,然后从出现的上下文菜单中select“委托”。

textFieldShouldReturn:应该返回NO来隐藏键盘。 还有一件事 – 不要设置自己的第一响应者, [textField resignFirstResponder]就够了,iOS应该自己来nextResponder

你可以在这个方法中隐藏keybord …

 - (void)textFieldDidEndEditing:(UITextField *)textField { [textField resignFirstResponder]; } 

删除[self becomeFirstResponder]; 应该这样做。

resignFirstResponder是closures键盘。 而becomeFirstResponder则是打开键盘。 所以在你的代码中,你正在closures,然后再次打开键盘。 最后一个动作是打开键盘,因此它不会closures。

你可以把UIResponder Class看作是UITextField超类