如何从带有文本框的自定义单元格中获取 didselectrowat?
How to get didselectrowat from a custom cell with textboxes?
我有一个包含 3(cell1,cell2,cell3) 个自定义单元格的动态表格视图,它可以在任何地方重复使用 0 次到 9 次。 (表格视图中的最大单元格将为 27 个单元格)。
这 3 个自定义单元格中的每一个都有 3 个文本框,此外,第二个单元格有 2 个 select 性别按钮,第三个自定义单元格有一个下拉菜单,其中包含输入的任何值cell1 单元格的第一个文本框。
现在的问题是,文本框接受了用户的触摸输入(它应该如此)并且 selectrowat 从未被调用,因此我没有得到 indexPath。
但我需要 indexPath,这样我就可以将每个单元格中的用户详细信息插入到数组中。
(anArray.insert("", at: indexPath)
因为我没有得到 indexPath,一切都失败了。如何获取 indexPath 并触摸文本框?
我在想一些类似函数的东西,它接受触摸,获取 indexPath,然后将控件传递给文本框。
我尝试过的东西。
我在用户触摸单元格之前禁用了文本框(并在用户删除select单元格后禁用了文本框,因此单元格进行了触摸。调用 didselectrowat 后,使再次激活文本框并使
textbox.becomeFirstResponder()
但不知何故,即使断点显示控件通过它并且文本框变为活动状态,文本框也永远不会成为第一响应者。但是没有弹出键盘,如果我再次触摸单元格,会发生相同的过程。
这似乎是什么问题?我看到另一个关于同一主题的 post,我试过了,但不幸的是,它不起作用,它是针对静态表视图的。
请问还有什么好的方法吗?除了让用户点击单元格两次/点击文本框之外..
您可以将 UITextField
的自定义单元格设置为 delegate
并使用回调来编辑 begins/ends,如下所示,
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
}
你可以试试这个
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
//your code here
}
我有一个包含 3(cell1,cell2,cell3) 个自定义单元格的动态表格视图,它可以在任何地方重复使用 0 次到 9 次。 (表格视图中的最大单元格将为 27 个单元格)。
这 3 个自定义单元格中的每一个都有 3 个文本框,此外,第二个单元格有 2 个 select 性别按钮,第三个自定义单元格有一个下拉菜单,其中包含输入的任何值cell1 单元格的第一个文本框。
现在的问题是,文本框接受了用户的触摸输入(它应该如此)并且 selectrowat 从未被调用,因此我没有得到 indexPath。 但我需要 indexPath,这样我就可以将每个单元格中的用户详细信息插入到数组中。
(anArray.insert("", at: indexPath)
因为我没有得到 indexPath,一切都失败了。如何获取 indexPath 并触摸文本框?
我在想一些类似函数的东西,它接受触摸,获取 indexPath,然后将控件传递给文本框。
我尝试过的东西。
我在用户触摸单元格之前禁用了文本框(并在用户删除select单元格后禁用了文本框,因此单元格进行了触摸。调用 didselectrowat 后,使再次激活文本框并使
textbox.becomeFirstResponder()
但不知何故,即使断点显示控件通过它并且文本框变为活动状态,文本框也永远不会成为第一响应者。但是没有弹出键盘,如果我再次触摸单元格,会发生相同的过程。
这似乎是什么问题?我看到另一个关于同一主题的 post,我试过了,但不幸的是,它不起作用,它是针对静态表视图的。
请问还有什么好的方法吗?除了让用户点击单元格两次/点击文本框之外..
您可以将 UITextField
的自定义单元格设置为 delegate
并使用回调来编辑 begins/ends,如下所示,
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
}
你可以试试这个
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
//your code here
}