从viewcontroller反向传递数据到uitableviewcell
我有这个问题,在gif附件中你可以看到它:如果我点击UrgenzaViewController的行它返回到ho fumatoViewController,我需要的是标签在UITableViewCell中,“Urgenza”将使用UrgenzaViewController中按下的行的标题进行修改。如何修改自定义单元格中的标签?谢谢大家从viewcontroller反向传递数据到uitableviewcell
在你Urgenza视图控制器创建你的文件的顶部的委托(上面类声明,下面的import语句)是这样的:
protocol UrgenzaDelegate: class {
func menuItemSelected(item: String)
}
然后你Urgenza内类声明创建委托的实例是这样的:
weak var delegate: UrgenzaDelegate?
然后didSelectRowAtIndexPath方法里面方法具d我会这样调用委托方法:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let delegate = delegate {
delegate.menuItemSelected(item: dataSource[indexPath.row])
}
}
用您用来填充单元标签的任何数据源替换'dataSource'。
最后,在您的初始视图控制器(Ho fumatoViewController)中,您需要符合您刚刚创建的代理。您可以通过这样的扩展做到这一点:
extension fumatoViewController: UrgenzaDelegate {
func menuItemSelected(item: String) {
// Here is where you save the selected item to whatever data source you are using
tableView.reloadData()
}
}
最后,也是非常重要的!无论你正在推动Urgenza视图控制器,你必须将自己的财产委托,像这样:
let vc = UrgenzaViewController()
vc.delegate = self // This is the important part!
self.present(vc, animated: true, completion: nil)
类类型的协议应该有弱代表。否则,您创建了一个零售周期(内存泄漏),并且您的代理似乎为零。 –
You are right。更新代码以创建弱参考 – LoganHenderson
现在看起来不错。 –
这可以通过代表团轻松完成 – OverD
可以请给我一个代码示例吗? –
你应该使用委托,我会尝试给你发送一个例子 –