将数据从viewcontroller反向传递到uitableviewcell

时间:2017-08-25 17:13:12

标签: ios swift uitableview

我遇到了这个问题,在附加的gif中你可以看到它:如果我点击UrgenzaViewController的行,它会回到Ho fumatoViewController,而我需要的是UITableViewCell中的Label" Urgenza"将使用UrgenzaViewController中按下的行标题进行修改。如何修改自定义单元格中的标签?谢谢大家

enter image description here

1 个答案:

答案 0 :(得分:2)

在你的Urgenza视图控制器中,在你的文件顶部创建一个委托(在你的类声明上方,在import语句下面),如下所示:

protocol UrgenzaDelegate: class {
    func menuItemSelected(item: String)
}

然后在你的Urgenza类声明中创建一个委托实例,如下所示:

weak var delegate: UrgenzaDelegate?

然后在didSelectRowAtIndexPath方法中,我会像这样调用委托方法:

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)