带文本字段的resignFirstResponder不起作用

时间:2017-04-10 07:12:00

标签: ios objective-c uitextfield

我有四个UITextField,并且每个都与.h文件中的插座相关联。我还为每个文本字段定义了4个解除函数,如下所示:

- (IBAction)dismiss1:(id)sender;
- (IBAction)dismiss2:(id)sender;
- (IBAction)dismiss3:(id)sender;
- (IBAction)dismiss4:(id)sender;

@property (strong, nonatomic) IBOutlet UITextField *name;
@property (strong, nonatomic) IBOutlet UITextField *email;
@property (strong, nonatomic) IBOutlet UITextField *weight;
@property (strong, nonatomic) IBOutlet UITextField *age;

在.m文件中实现dismiss函数:

- (IBAction)dismiss1:(id)sender {
[sender resignFirstResponder];
}

- (IBAction)dismiss2:(id)sender {
[sender resignFirstResponder];
}

...

我非常确定插座是否正确连接到每个UITextFiled。每个解雇功能的IBAction也与“编辑结束”相关联。相应的事件。但是,当我使用模拟器运行应用程序时,当我点击“输入/完成”时,键盘不会被忽略。同样非常奇怪的是,当我将断点放在解散功能中时,点击'输入'在相应的UITextField中键入时不会调出调试器。

非常感谢你的帮助!

更新:我使用断点检查了发件人的对象类型(dismiss1),并检查了UITextFiled。但是,当我点击“输入”时,我没有进入调试模式。在第一个TextField中,但是当我单击第二个TextField(在键入之前)时进入调试模式。

6 个答案:

答案 0 :(得分:1)

使用代码重新签名keyBoard而不指定textFiled name。

- (IBAction)dismiss1:(UITextField*)sender {
  [self.view endEditing:true];
  // or use [sender resignFirstResponder];
}

答案 1 :(得分:1)

设置UITextFielDelegate

textfieldname.delegate = self;

使用此代码可解决您的问题

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{

   [textField resignFirstResponder];
   return YES;

}

答案 2 :(得分:1)

添加文本字段委托

name.delegate = self;
email.delegate = self;

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

答案 3 :(得分:0)

无需为textfield创建四个操作

您可以设置Textfield的委托并使用以下方法

- (void)textFieldDidEndEditing:(UITextField *)textField

在此方法中,您可以将文本字段与返回文本字段的方法进行比较,并在&#34中完成任务;如果"条件

希望它对你有帮助!!

答案 4 :(得分:0)

当文本字段失去"焦点"时调用Editing did end,意味着它不再是第一个响应者(因为它已经辞职或另一个成为第一响应者)。 / p>

使用textFieldShouldReturn检测何时调用返回键。

在调用此字段时调用texfield上的resignFirstResponder。之后将发生Editing did end事件。

编辑:你必须实现一些东西(你的ViewController?)作为文本域的委托。

答案 5 :(得分:0)

将标记分配给不同的文本字段 然后>

textfield.delegate = self;

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
if(textfield.tag==num)
{
  [textField resignFirstResponder];

}
   return YES;
}