我的 tableview 中的一个单元格将我带到另一个 UITableViewController,我必须在其中选择一个选项。
我试图将第一个 viewcontroller 设置为 UITableViewController 的委托(delegate),但它不起作用,我需要传递所选数据。
我认为它不起作用,因为对于 UITableViewControllers,您没有设置委托(delegate),因为它们自动成为自己的委托(delegate)。
那我该怎么做呢?
我通过 self.navigationController?.popViewController(animated: true)
返回,这样我就不会丢失已经填充到第一个 View Controller 中的信息。
有没有办法为 UITableViewController 设置自定义委托(delegate),或者我应该将 tableview 放在常规的 viewcontroller 中?
谢谢
最佳答案
您正在将 UITableView
的 delegate
设置为您的第一个 Controller 。不要那样做,这个 delegate
已经默认设置为这个 UITableViewController
。
相反,为了传递数据使用回调闭包:
class TVC: UITableViewController {
var itemSelected: (Item) -> Void = { _ in }
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
itemSelected(dataSourceArray[indexPath.row])
}
}
并且在第一个 View Controller 中,当您呈现/推送它时设置关闭该 Controller
let vc = TVC(...)
vc.itemSelected = { item in // this is called when you call `itemSelected` from `TVC`
// ... declare what will happen after item is selected
}
navigationController?.pushViewController(vc, animated: true)
或者如果你正在使用 segues
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "identifier" {
let destination = segue.destination as! TVC
destination.itemSelected = { item in
// ...
}
}
}
关于ios - 如何将自定义委托(delegate)设置为 UITableViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288382/