UITextField becomeFirstResponder 不显示文本光标
Posted
技术标签:
【中文标题】UITextField becomeFirstResponder 不显示文本光标【英文标题】:UITextField becomeFirstResponder not showing cursor for text 【发布时间】:2014-01-04 02:32:40 【问题描述】:我在每个 UITableViewRow 上有两个 UITextField,由于某种原因,当我在 UIKeyboard 上按回车键时,两个 UITextField 都不会响应(光标不可见)。
我有一个正在使用的自定义 UITableViewCell,如果你愿意,我可以向你展示代码,但我认为这不是问题,因为返回键适用于 95% 的 UITableViewCell。所以我在想也许这就是我处理 UITextFields 的委托方法的方式?
这是我用于委托方法的代码。
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textfield
int height = self.finishingTableView.frame.size.height;
self.finishingTableView.frame= CGRectMake(self.finishingTableView.frame.origin.x, self.finishingTableView.frame.origin.y, self.finishingTableView.frame.size.width, 307);
// select correct row
if (textfield.tag > 999999)
int adjustTag = textfield.tag-1000000; // remove a million so that you have the text fields correct position in the table. (this is only for height textfields)
NSIndexPath *indexPath =[NSIndexPath indexPathForRow:adjustTag inSection:0];
[finishingTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[self tableView:finishingTableView didSelectRowAtIndexPath:indexPath];
[self.finishingTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
return YES;
else
NSIndexPath *indexPath =[NSIndexPath indexPathForRow:textfield.tag inSection:0];
[finishingTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[self tableView:finishingTableView didSelectRowAtIndexPath:indexPath];
[self.finishingTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
return YES;
return YES;
- (BOOL)textFieldShouldReturn:(UITextField *)textField
NSLog(@"%i", textField.tag+1);
[[self.view viewWithTag:textField.tag+1] becomeFirstResponder];
// this means there has been a change in the UItextfield
NSLog(@"%@", selectedItemDictionary);
if (textField.tag < 999999)
tempFinishingObjectDictionary = [selectedItemDictionary mutableCopy];
if (![textField.text isEqualToString:[selectedItemDictionary objectForKey:@"mMM"]])
tempUpdatedRow = @"T";
// remove kevalues
[tempFinishingObjectDictionary removeObjectForKey:@"updatedRow"];
[tempFinishingObjectDictionary removeObjectForKey:@"new_mMM"];
// update keyvalues
[tempFinishingObjectDictionary setValue:tempUpdatedRow forKey:@"updatedRow"];
[tempFinishingObjectDictionary setValue:textField.text forKey:@"new_mMM"];
else
if (![textField.text isEqualToString:[selectedItemDictionary objectForKey:@"hMM"]])
tempUpdatedRow = @"T";
// remove kevalues
[tempFinishingObjectDictionary removeObjectForKey:@"updatedRow"];
[tempFinishingObjectDictionary removeObjectForKey:@"new_hMM"];
// update keyvalues
[tempFinishingObjectDictionary setValue:tempUpdatedRow forKey:@"updatedRow"];
[tempFinishingObjectDictionary setValue:textField.text forKey:@"new_hMM"];
NSLog(@"%@", tempFinishingObjectDictionary);
[coreDataController editSelectedFinishing:htmlProjID UpdatedNSD:tempFinishingObjectDictionary SelectedRow:selectedItemIndexPathRow];
[SVProgressHUD dismiss];
NSLog(@"%@", selectedItemDictionary);
return YES;
我不知道在哪里查看或如何找到此错误,因为它看起来很随机,但每次都发生在相同的 UITextFields 上。
上面的代码是我认为问题所在;但是,在记录了所有内容并调试了几个小时后,我开始认为这是 UITableViewCells 中的 UITextFields 的错误。
【问题讨论】:
【参考方案1】:是[[self.view viewWithTag:textField.tag+1] canBecomeFirstResponder] == YES
?
您还需要先退出当前的UITextField
,然后再将下一个设置为第一响应者
[textField resignFirstResponder];
【讨论】:
我刚刚尝试在我设置 textfield.tag+1 的地方添加 resignFirstResponder 成为FirstResponder。它从视图中删除了 UIKeyboard,但仍然没有使 textfield.tag+1 成为FirstReasponder。 如果这是结果,您可以检查/记录吗? [[self.view viewWithTag:textField.tag+1] canBecomeFirstResponder] == YES 只是想弄清楚如何做到这一点,并会尽快让您知道...只是不确定如何登录 canbecomefirstreasponder 类似这样的 NSLog([[self.view viewWithTag:textField.tag+1] canBecomeFirstResponder] ? @"Yes" : @"No"); 是的,我知道如何登录。并且 UItextfield 返回 NO以上是关于UITextField becomeFirstResponder 不显示文本光标的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UITextField 子类中设置 UITextField 的属性
在 UITextField 操作中将 UITextField 字符串转换为 Double
如何调整 UITextField 占位符文本以适合 UITextField 宽度?