我有一个分组表视图,并尝试在用户按 Enter 时将新的第一响应者设置为文本字段。
这对我来说不是什么新鲜事,在我进行一些不相关的更改之前我的代码可以工作,但现在却不能了。当我设置第一响应者时,我有一个指向正确文本字段的指针,但没有任何反应。
焦点完全离开任何文本字段,键盘保留在屏幕上。然后,回车键和“隐藏键盘”键都会停止工作,直到用户再次将焦点重新集中在文本字段上。
这是代码:
- (void)uiTextFieldShouldReturn:(ObjectEditTextField *)uiTextField
{
if ((group.fields.count - 1) > uiTextField.fieldTag)
{
//loop through every table group
for (int i = uiTextField.fieldTag + 1; i < group.fields.count; i++) {
//get whatever field is in the row (not necessarily a text field)
ObjectEditField *field = [group.fields objectAtIndex:i];
// a check if the field is of type UITextField
if (field.propName && field.updateObjectOnEdit == YES && [field isKindOfClass:[UITextField class]]) {
// set the active field
activeField = field;
// adjust the table view offset to make sure the text field is visble
[self setTableViewOffsetForTextField:field];
// obtain a pointer to the textfield object and set it to be the first responder
UITextField *textField = (UITextField *)field;
NSLog(@"field %@", textField.fieldLabel);
if (![textField.field isFirstResponder]) {
[textField.field becomeFirstResponder];
return;
}
break;
}
}
}
首先,我绝对会验证您上面的描述,即您的代码“之前有效”并且更改是“无关的”。根据定义,您对工作代码所做的任何更改都会以某种方式导致它不再工作。如果不是直接的,那么由于副作用而间接的。
从您发布的代码示例中跳出来的所有内容都是:
// adjust the table view offset to make sure the text field is visble
[self setTableViewOffsetForTextField:field];
您正在做正确的事情,确保包含 textField 的单元格滚动到视图中。一种可能性是,当您将单元格滚动到视图中时,就会创建该单元格,这可能会导致以下问题,具体取决于代码的其余部分:
您发送的文本字段becomeFirstResponder
to 是与单元格中实际的 textField 不同的实例。
当您调用时单元格尚未创建becomeFirstResponder
由于动画将带有文本字段的单元格滚动到视图中。
我会撤销您为返回到工作版本所做的任何更改,并真正确保发送正确的文本字段becomeFirstResponder
在预期的时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)