Swift 从第二个视图控制器更新tableview

Swift 从第二个视图控制器更新tableview,swift,tableview,Swift,Tableview,我有一个名为Deck的类,它有一个名为cards的结构数组属性。我设置了一个tableview,以按名称显示每个甲板。我还有一个视图控制器,可以输入一个名称,用于添加新的组或保存旧组。添加新组时,它工作正常,但是每当我更新旧组时,它都会创建一个精确的副本并将其添加到表视图中,而不是简单地更新名称 这是我从DeckEditViewController开始准备的步骤: override func prepare(对于segue:UIStoryboardSegue,发送方:Any?){ 超级。准备(收

我有一个名为
Deck
的类,它有一个名为cards的结构数组属性。我设置了一个tableview,以按名称显示每个甲板。我还有一个视图控制器,可以输入一个名称,用于添加新的组或保存旧组。添加新组时,它工作正常,但是每当我更新旧组时,它都会创建一个精确的副本并将其添加到表视图中,而不是简单地更新名称

这是我从
DeckEditViewController
开始准备的步骤:

override func prepare(对于segue:UIStoryboardSegue,发送方:Any?){
超级。准备(收件人:segue,发件人:发件人)
//仅在按下保存按钮时配置目标视图控制器。
guard let button=发送方为?UIBarButtonItem,button==saveButton else{
打印(“保存按钮未按下,取消”)
返回
}
让name=deckNameTextField.text??“”
让卡片=甲板?卡片
牌组=牌组(名称:名称,牌:牌???[])
}
这是我在我的表视图控制器中的放松:

@IBAction func unwindToDeckList(发送方:UIStoryboardSegue){
如果让sourceViewController=sender.source为DeckEditViewController,则让deck=sourceViewController.deck{
如果让selectedIndexPath=tableView.indexPathForSelectedRow{
//更新现有甲板
甲板[selectedIndexPath.row]=甲板
tableView.reloadRows(位于:[selectedIndexPath],带:。无)
打印(“更新现有甲板”)
}
否则{
//添加新甲板
让newIndexPath=IndexPath(行:decks.count,节:0)
甲板。附加(甲板)
tableView.insertRows(位于:[newIndexPath],带:。自动)
打印(“添加新组块”)
}
}
}

如果有人能帮我指出正确的方向,我就迷路了。提前感谢。

您可以根据需要使用自定义协议-委派,也可以使用通知中心获取通行证数据。 如果您是新手,请查看这些网站以了解更多有关学员的信息

  • 您还可以检查如何使用委托传递数据。
    我希望这可能对您有所帮助。

    您可以使用闭包。在第二个视图控制器中定义闭包

    var somethingHappened: (() -> Void)?
    
    secondVC.somethingHappened = { [weak self] in
        self?.tableView.reloadData()
    }
    
    在第一个视图控制器中实现它

    var somethingHappened: (() -> Void)?
    
    secondVC.somethingHappened = { [weak self] in
        self?.tableView.reloadData()
    }
    
    这些只是简单的用法示例。您也可以使用闭包发送数据

    var somethingHappened: ((String) -> Void)?
    
    secondVC.somethingHappened = { [weak self] (something) in
        // use the coming data
    }
    

    使用闭包,您不需要编写协议。所以你在编码时间上有所增加。

    所以我发现我做错了什么。我是通过一个单元附件访问第二个视图控制器的,它显然不会自动传递索引值。手动传递该值后,我就能够正确地更新旧数据。

    您可以使用委托将数据传递到其他视图,然后重新加载tableview,我理解:您有一个table view,您传递到其他视图,在第二个视图中您更新了数据,您返回到第一个视图并希望更新数据,对吗,这是正确的。目前,我已经将数据传递到第二个视图中,在那里我可以更改名称。但是,当我点击save时,我的表视图应该正在更新发送到第二个视图的单元格。相反,当数据被发送回表视图时,它会添加另一行,而不是更新现有单元格。被传回的数据是一个具有项数组属性的类。我想知道这是否与我如何传回数组有关?