从viewcontroller反向传递数据到uitableviewcell

问题描述:

我有这个问题,在gif附件中你可以看到它:如果我点击UrgenzaViewController的行它返回到ho fumatoViewController,我需要的是标签在UITableViewCell中,“Urgenza”将使用UrgenzaViewController中按下的行的标题进行修改。如何修改自定义单元格中的标签?谢谢大家从viewcontroller反向传递数据到uitableviewcell

enter image description here

+0

这可以通过代表团轻松完成 – OverD

+0

可以请给我一个代码示例吗? –

+1

你应该使用委托,我会尝试给你发送一个例子 –

在你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) 
+0

类类型的协议应该有弱代表。否则,您创建了一个零售周期(内存泄漏),并且您的代理似乎为零。 –

+0

You are right。更新代码以创建弱参考 – LoganHenderson

+0

现在看起来不错。 –