带有文本字段的 resignFirstResponder 不起作用

Posted

技术标签:

【中文标题】带有文本字段的 resignFirstResponder 不起作用【英文标题】:resignFirstResponder with Text Field is not working 【发布时间】:2017-04-10 07:12:00 【问题描述】:

我有四个 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。每个dismiss函数的IBAction也对应着'Editing did end'事件。但是,当我使用模拟器运行应用程序时,当我单击“Enter/Done”时键盘不会关闭。也很奇怪,当我将断点放在关闭函数中时,在输入相应的 UITextField 时单击“Enter”并不会调出调试器。

非常感谢您的帮助!

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

【问题讨论】:

将您的发件人对象转换为 UITextField 对象,然后重试。 您是否在 Storyboard 中设置了 UITextfields 委派您的控制器? “编辑结束”不需要IBAction方法,你可以只声明方法并在情节提要中连接“编辑结束”并在执行中编写resignFirstResponder 尝试在您的解除方法中使用断点并检查发件人的类型。也使用 [self.view endEditing:YES];在您的解雇方法中。 【参考方案1】:

设置UITextFielDelegate

textfieldname.delegate = self;

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

-(BOOL)textFieldShouldReturn:(UITextField *)textField


   [textField resignFirstResponder];
   return YES;


【讨论】:

我看不出这段代码是如何工作的,所有的 if 语句似乎都在做同样的事情。 为什么需要 if-else 语句? :/ 无论文本字段是什么实例,您都在做同样的事情。只需辞职并返回是【参考方案2】:

使用代码退出keyBoard而不指定textFiled名称。

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

【讨论】:

检查您的对象类型 @WenjunWu - 你在 UIVIew 或 UIscrollview 下的文本字段 @Wenjun Wu.dismiss1 连接到IBOutlet。 @Anbu.Karthik 我的文本字段位于 UI 表视图中。这重要吗? @WenjunWu - 是的,是prboem,将辞职更改为[[self yourtableViewName] endEditing:YES],更多信息请参见***.com/questions/8248477/…【参考方案3】:

添加文本字段委托

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

-(BOOL)textFieldShouldReturn:(UITextField *)textField

  [textField resignFirstResponder];
   return YES;

【讨论】:

【参考方案4】:

无需为文本字段创建四个操作

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

- (void)textFieldDidEndEditing:(UITextField *)textField

在此方法中,您可以将您的文本字段与返回文本字段的方法进行比较,并让您在“if”条件下完成任务

希望对你有帮助!!

【讨论】:

【参考方案5】:

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

textfield.delegate = self;

-(BOOL)textFieldShouldReturn:(UITextField *)textField

if(textfield.tag==num)

  [textField resignFirstResponder];


   return YES;

【讨论】:

【参考方案6】:

Editing did end 在文本字段确实失去“焦点”时被调用,这意味着它不再是第一响应者(因为它已经辞职或其他人成为第一响应者)。

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

并在调用时在 texfield 上调用 resignFirstResponder。之后将发生Editing did end 事件。

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

【讨论】:

以上是关于带有文本字段的 resignFirstResponder 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有空格和固定数量数字的文本字段,例如密码文本字段

带有文本字段的多个复选框

带有按钮和文本字段的 UIScrollview [关闭]

选择后在模板内显示文本(带有文本字段和值字段)

带有文本字段的 UiTableView - 出现键盘时滚动

带有更多文本字段的 UIAlertViewStyleLoginAndPasswordInput?