从另一个视图控制器更新 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 数据单元格的主要内容,如果未能解决你的问题,请参考以下文章