带有文本字段的 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章