在const onChangeHandler = (key: Fields, value: string) => {
switch (key) {
case Fields.User:
// do something with `value`
break;
case Fields.Password:
// do something with `value`
break;
case Fields.Country:
// do something with `value`
break;
}
};
从我的表格视图中删除任何行之后,我无法在可重用的自定义单元格中获取文本字段以通过deleteRows(at:with:)
来获得焦点(在调用becomeFirstResponder()
之后被调用) 。始终在insertRows(at:with:)
中调用becomeFirstResponder()
。
在cellForRow(at:)
从表视图中删除一行后,总是开始出现此问题。在删除任何行之前没有问题,deleteRows(at:with:)
可以按预期将焦点对准文本字段。
我进行了一些测试,以了解删除行后为什么会出现此问题...我的测试显示出有趣的区别:
情况1 :删除任何行后(即,becomeFirstResponder()
返回false时),becomeFirstResponder()
被称为 之前 textFieldShouldBeginEditing(_:)
返回。从未调用cellForRow(at:)
。
情况2 :另一方面,在删除任何行之前(即textFieldDidBeginEditing(_:)
返回true之前),becomeFirstResponder()
被称为 AFTER < / em> textFieldShouldBeginEditing(_:)
返回。按预期,cellForRow(at:)
之后textFieldDidBeginEditing(_:)
被调用。
这个问题可能与这种差异有关,但是经过数小时的尝试和研究,我无法解决这个谜。
在related Q&A中,建议不要从textFieldShouldBeginEditing(_:)
内部重新加载tableView。就我而言,textFieldDidEndEditing()
方法有时是在deleteRows(at:with:)
内部调用的,有时是从textFieldDidEndEditing()
调用的(即向左滑动)。因此,这不能解释我的问题。另一个相关的问答环节可能是this one。
CustomCell的类中的
getFocus(),是从TableViewController中的tableView(_:commit:forRowAt:)
调用的:
cellForRow(at:)
func getFocus() {
if let itemTextField = itemTextField {
itemTextField.delegate = self
itemTextField.isUserInteractionEnabled = true
itemTextField.becomeFirstResponder()
}
}
:
cellForRow(at:)
答案 0 :(得分:0)
请勿在{{1}}中调用getFocus
,在插入新行时应注意,您可以滚动到新行并在cellForRowAt
中调用getFocus
。
希望能为您提供帮助。