从另一个视图控制器更新 UITableView 数据单元格

Posted

技术标签:

【中文标题】从另一个视图控制器更新 UITableView 数据单元格【英文标题】:Update UITableView Data cell From Another View Controller 【发布时间】:2021-04-23 00:59:10 【问题描述】:

一旦用户进入 SecondVC 并且喜欢或不喜欢他们输入的单元格的心脏,我正在尝试更新我的 firstVC“喜欢按钮”状态。我今天尝试了很多不同的方法,但似乎没有一个能正常工作。任何帮助或想法

基本上。用户可以单击一个单元格,然后被定向到另一个视图控制器,他们还可以在其中更改类似按钮的状态。一旦他们返回到 mainVC,我希望喜欢按钮显示更改。

我想知道我是否应该将单元格数据保存在手机本地,或者只是将变量来回发送到每个视图控制器。但是,如果我来回发送变量,如何将变量发送回第一个 VC 到特定单元格,并让它知道不再喜欢按钮之类的单元格。我希望我说得通。谢谢大家。在这里 swift 还是新手 :)

【问题讨论】:

用这些术语思考 - MVC。你有最后两块,但你的dataSource(或模型)“本地”。我认为您从您的问题中“看到”了这一点。这就是(对我来说)Combine 很好的原因——即使没有 SwiftUI(我认为它仍然太原始),你也不得不考虑你的应用程序的模型层。应用程序的模型确实需要更加全球化。如果可能,我建议将dataSource 放入SceneDelegate,否则将AppDelegate 我有点明白你想说什么。无论如何,您可以以某种方式为我深入研究。 如何让它全局更新一个 UITableView 单元格 【参考方案1】:

我认为你可以使用委托模式

protocol ViewController2Delegate: class 
    func buttonStatusDidChange(_ viewController2: ViewController2, to status: Bool)

将此属性添加到第二个视图控制器:

weak var delegate: ViewController2Delegate?

当按钮状态改变时,调用:

delegate?.buttonStatusDidChange(self, to: true)

使第一个视图控制器符合协议:

extension ViewController1: ViewController2Delegate 
    func buttonStatusDidChange(_ viewController2: ViewController2, to status: Bool) 
        // change the button according to the status
    

【讨论】:

那将只更新第一个 VC 中的特定单元格? ViewController 是一个 tableViewController。 我想是的,第一个 ViewController 应该知道第二个显示的单元格。使用第一个 ViewController 中的 IndexPath 属性存储第二个 ViewController 正在显示的单元格。 go下面的“使第一个视图控制器符合协议:”代码在哪里? 我试了一下你的代码,它没有改变任何东西。您可以尝试发布一些代码

以上是关于从另一个视图控制器更新 UITableView 数据单元格的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableView 中选择行时变量不更新

如何通过iOS Objective C中的appDelegate从另一个视图控制器重新加载表视图

从另一个视图调用表视图函数

从另一个视图控制器更新视图控制器的内容而不打开它

快速从另一个视图控制器修改一个变量

从另一个视图控制器更新 UIPageControl