tableView reloadData丢失文本字段焦点

时间:2013-02-27 19:05:54

标签: ios objective-c cocoa-touch

我有一些带有文本字段和其他标签的单元格。基本上,在用户使用键盘输入数据后,他们可以导航到另一个文本字段(通过各种方式)并保存他们希望在指针中找到的textField,然后设置第一个响应者触发文本字段的didEndEditing方法。在didEndEditing中,我调用了一个刷新方法来重新加载tableData来更新各种标签,然后我再次尝试将setFirstResponder设置为我存储的文本字段。

最终结果是键盘停留在屏幕上,但文本字段无法获得焦点。但是,如果你再试一次,它会第二次工作......

这是一些代码。请记住,已经删除了许多涉及计算和日志等的内容。我只添加了与此问题相关的内容。

编辑,我知道我提到我使用箭头按钮导航..如果你不使用箭头按钮,问题也在这里。您必须手动按(或单击)文本字段两次才能在离开另一个文本域后获得焦点。

 //user presses an arrow button to enter textfield

 //logic is done here to find what the next textfield would be

 _nextTextFieldSelection = (UITextField *)[[_tableView cellForRowAtIndexPath:destinationIndexPath] viewWithTag:newTag];
[_nextTextFieldSelection becomeFirstResponder];


- (void)textFieldDidEndEditing:(UITextField *)textField
{
     //some stuff for calculations
     [self refreshScreen]
}

- (void)refreshScreen
{
    [_tableView reloadData]; 
    //set tables values

    [_nextTextFieldSelection becomeFirstResponder];
}

3 个答案:

答案 0 :(得分:0)

重新加载表格时,将重新创建单元格。您的缓存nextTextFieldSelection可能不再是对正确的文本字段实例的引用。尝试缓存indexPath而不是文本字段,然后使用标记从给定索引路径的单元格中获取相应的文本字段。

答案 1 :(得分:0)

我遇到了同样的问题-在tableview reloadData之后失去了焦点。 但是,添加tableview reloadData方法后,cellForRowAtIndexPath解决了它。该答案已经在注释中给出,但可以在此处添加以获取更多可见性。

答案 2 :(得分:0)

另一种解决方案-使用tableView.insertRows(at: indexPaths, with: .automatic)

相关问题