tableview中的一个单元格将我带到另一个UITableViewController,在其中必须选择一个选项。
我试图将第一个viewcontroller设置为UITableViewController的委托,但是它不起作用,并且我需要传递所选的数据。
我认为这是行不通的,因为对于UITableViewControllers,您没有设置委托,因为它们自动是自己的委托。
那我该怎么办呢?
我回过self.navigationController?.popViewController(animated: true)
,所以我不会丢失第一个ViewController中已经填写的信息。
有没有一种方法可以为UITableViewController设置自定义委托,还是应该将tableview放在常规的viewcontroller中?
谢谢
答案 0 :(得分:2)
您正在将delegate
中的UITableView
设置为第一个控制器。不要这样做,delegate
已默认设置为UITableViewController
。
相反,要传递数据,请使用回调闭包:
class TVC: UITableViewController {
var itemSelected: (Item) -> Void = { _ in }
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
itemSelected(dataSourceArray[indexPath.row])
}
}
,并且在第一个视图控制器中,当您演示/推动它时,设置该控制器的关闭状态
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
// ...
}
}
}