Swift:如何从子视图控制器prepareForSegue传递数据来更改父视图控制器tableview的单元格的TextLabel?

时间:2015-08-11 17:26:15

标签: ios swift uitableview

如何从子视图控制器prepareForSegue传递数据以更改父视图控制器tableview的单元格标题?

我这样做了,但我不认为这是对的:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

{
    if segue.identifier == "unwindToCreateTask" {
        let contact = contactList[self.tableView.indexPathForSelectedRow()!.row]

        let destinationVC = segue.destinationViewController as! CreateTaskVC

        destinationVC.tableView.reloadData()

        if let destinationCell = destinationVC.tableView.dequeueReusableCellWithIdentifier("assignToCell") as? UITableViewCell {
            destinationCell.textLabel?.text = contact.contactName
            destinationCell.detailTextLabel?.text = contact.contactEmail
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的子视图控制器不应该知道其父视图的实现。您正在从子项进入父项的表视图,但父项从子项访问所需数据更为正确。展开segues允许您通过在父级中定义展开方法来完成此操作。

在您的父级中,您定义了一个UIStoryboardSegue方法,该方法只需一个UIStoryboardSegue参数。这是在segue开头的父母那里调用的,并允许你传回"以防止委托需要的方式向父级提供任何数据。 sourceViewController具有@IBAction func unwindToParent(segue: UIStoryboardSegue) { if let childVC = segue.sourceViewController as? ChildVC { // update this VC (parent) using newly created data from child } } 属性,因此在展开segue的情况下,子项是源。

let dateString = "\(components.year)\(components.day)\(components.month)"
println("dateString: \(dateString)")

定义方法后,您可以通过控制从子场景中的触发元素拖动到"退出"来创建故事板中的segue。该场景顶部的图标。从显示的菜单中,选择您刚刚在父级中创建的展开操作。