我有一个包含3(cell1,cell2,cell3)个自定义单元格的动态表格视图,可以在0次到9次的任何位置重复使用。 (表格视图中的最大单元格为27个单元格。)
这3个自定义单元格中的每一个均具有3个文本框,此外,第二个单元格具有2个用于选择性别的按钮,第3个自定义单元格具有一个下拉菜单,该菜单具有在cell1单元格的第一个文本框中键入的任何值
现在的问题是,文本框从用户那里获取了触摸输入(应该如此),并且didselectrowat从未被调用,因此我没有得到indexPath。 但是我需要indexPath,以便可以将每个单元格的用户详细信息插入数组。
(anArray.insert("", at: indexPath)
由于我没有得到indexPath,所以一切都会失败。如何获取indexPath并接触到文本框?
我在想类似函数的功能,该函数可以进行触摸,获取indexPath,然后将控件传递给文本框。
我尝试过的事情。
我在用户触摸单元格之前禁用了文本框(并在用户取消选择单元格后禁用了文本框,因此单元格进行了触摸。一旦didselectrowat被调用,请再次使文本框处于活动状态并使
textbox.becomeFirstResponder()
但是以某种方式,即使断点显示控件正在通过并且文本框变为活动状态,文本框也永远不会成为第一响应者。但是没有弹出键盘,如果我再次触摸该单元格,也会发生相同的过程。
这里似乎是什么问题?我看到了关于同一主题的另一篇文章,我尝试了一下,但不幸的是,它不起作用,而且是用于静态tableview的。
还有一种好的方法吗?除了使用户两次单击该单元格/在文本框外单击之外。
答案 0 :(得分:1)
您可以将delegate
的自定义单元格设置为UITextField
,并使用如下所示的回调函数来开始/结束编辑
class MyCustomCell: UITableViewCell, UITextFieldDelegate {
public var editCallback: (() -> Void)?
/// Set 'textField.delegate = self' on initialization.
func textFieldDidBeginEditing(_ textField: UITextField) {
self.editCallback?()
}
}
然后将cellForRowAt
中的回调用作
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = MyCustomCell()
cell.editCallback = { [weak self] in
print(indexPath)
}
return cell
}
答案 1 :(得分:0)
您可以尝试
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
//your code here
}