从另一个类 Swift 更新视图控制器的 UI [关闭]
Posted
技术标签:
【中文标题】从另一个类 Swift 更新视图控制器的 UI [关闭]【英文标题】:update UI of view controller from another class Swift [closed] 【发布时间】:2021-10-21 12:23:12 【问题描述】:我有一个带有progressView、标签和按钮的ViewController
。当用户单击ViewController
上的按钮时,任务在task.swift
的后台运行。我想根据task.swift
中的任务进度更新ViewController
中的标签和progressView。
【问题讨论】:
1) 您可以在任务可以访问的地方保留对ViewController
的引用。 2) 您可以使用NSNotification
之类的东西向观察者发送更新。 3)您可以保留在任务/视图控制器之间传递的公共状态对象。其他可能性也是如此。包括您的代码和您尝试过的内容,您可能会为您的问题找到更好的答案。
我还没有尝试过任何东西,因为我不知道如何接近。感谢您的回复,它给了我一个想法。我将使用带有静态变量的结构来跟踪进度。
我不确定带有静态变量的结构如何解决这个问题。
是的,你是对的,没想到。
【参考方案1】:
Swift 通信模式
您有多种方式在 Swift 中的 2 个类之间建立通信:
-
方法调用/返回
委托模式
关闭
通知模式
发布者订阅者
尊重 MVC(模型 - 视图 - 控制器)
因为您希望您的模型(此处为 Task
)不了解 ViewController 以尊重 MVC,所以您不能仅通过引用应用简单的方法调用。
选对的
但是所有其他方式都是完全有效的。因为 ViewController 和 Task 之间似乎是一对一的关系,所以最简单的解决方案是使用委托或闭包。如果您的班级关系是一对多的,您可以选择通知。 Publishers 将用于响应式编程,如果您喜欢 Combine。
【讨论】:
以上是关于从另一个类 Swift 更新视图控制器的 UI [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
从另一个视图控制器单击 uitableviewcell 后,swift 3 更改 uitableviewcell?
Swift:如何从另一个类 X 更新 UILabel:UIButton