iOS UITextField resignFirstResponder 问题

Posted

技术标签:

【中文标题】iOS UITextField resignFirstResponder 问题【英文标题】:iOS UITextField resignFirstResponder issue 【发布时间】:2017-02-15 12:01:46 【问题描述】:

在我的应用程序中,在注册屏幕上,我有tableView,每个单元格中都包含UITextField,页脚中的提交按钮。一切正常,除非我在最后一个 TextField 中输入值并点击提交按钮(不退出键盘)。我的函数没有显示值,因为只有在文本编辑结束时才输入值。我正在使用 Delegate 来获取值。

我的代码是: 在 customcell.m 中:

- (void)textFieldDidEndEditing:(UITextField *)textField 
    if ([textField.text length] >0) 
    [self.cellImageview setImage:editImage];
    
    else
    [self.cellImageview setImage:defaultImage];
    
    [_delegate signUpTableCell:self didUpdateValue:textField.text inTextField:textField];

在我的视图控制器中:

-(void)signUpTableCell:(SignUpTableCell *)cell didUpdateValue:(NSString *)value inTextField:(UITextField *)textField    
    NSLog(@"cell:%@    value: %@  textfield value:%@ ", cell, value, textField.text);
    [registerDictionary setValue:value forKey:textField.placeholder];
    NSLog(@"registerDictionary:%@", registerDictionary);

问题: 当我单击提交按钮时,最后一个 textField 值为 nil,可能是因为 -(void)signUpTableCell:(SignUpTableCell *)cell didUpdateValue:(NSString *)value inTextField:(UITextField *)textField 除非 textField 结束编辑,否则不会接到电话。如果我在空白处单击并退出键盘,它就可以正常工作。有办法解决这个问题吗?

【问题讨论】:

【参考方案1】:

您是否尝试在单击按钮时手动调用resignFirstResponder()

【讨论】:

是的,我做了,没用。它辞去第一响应者但无法获得价值 所以你的键盘实际上消失了,你的 textFieldDidEndEditing() 方法正在被调用,但 didUpdateValue() 没有被调用?您能否通过手动调用resignFirstResponder() 来检查是否调用了这些方法中的任何一个?【参考方案2】:

在提交按钮中添加以下代码:

[self.view endEditing:yes];

或使用

[self.yourTableview.scrollView endEditing:yes];

【讨论】:

已经这样做了,但我仍然无法在 registerDictionary 数组中获得价值【参考方案3】:

通过对我的代码进行一些更改来修复它。从 registerDictionary 获得值后,我使用了 [self.view endEditing:yes]; 。我真傻。

【讨论】:

以上是关于iOS UITextField resignFirstResponder 问题的主要内容,如果未能解决你的问题,请参考以下文章

IOS代码布局 UITextField

猫猫学iOS之UITextField右边设置图片,以及UITextField全解

iOS-UITextField 全面解析

iOS开发-UI UITextField

iOS学习四之UITextField

text [setBottomBorder to UITextField] #ios #UI #UITextField