动态更新 Swift 中的标签/按钮标题



我想使用 Swift 更新 iOS 上用户界面元素的 title 属性。在这种情况下,它是一个UIBarButton,但它可以是UILabel,UIButton或其他任何东西。目前我正在使用此代码,它适用于:

func setStatusMessage(barButton: UIBarButtonItem) {
    let currentVersion = StatusModel.getCurrentVersion()
    var statusUpdates = [StatusModel]()
    var statusForCurrentVersion: StatusModel!
    var statusMessage = String()
    // check if update required before setting the text
    checkIfLocalStatusNeedsUpdate()
    barButton.title = getLocalStatusMessage()
    // Try to update status anyway...
    getStatusFromRemoteSource { (statusUpdates) -> Void in
        for status in statusUpdates {
            if status.version == currentVersion {
                statusForCurrentVersion = status
            }
        }
        self.saveStatusFromRemoteSource(statusForCurrentVersion)
        barButton.title = statusForCurrentVersion.message
    }
}

虽然有效,但这个解决方案也很丑陋,因为它确实需要在我的模型中嵌入用户界面(视图)元素。不完全是一种MVC美女.....

我不能简单地使用return因为在获取远程状态之前将返回本地状态。所以我想我需要某种处理程序/侦听器/委托(/*getting lost here*/)来动态更新视图。在这种情况下,这意味着:使用本地存储的值设置标题,并在收到远程值时更新它。

以符合 MVC 的方式处理此方案,从模型代码中删除 UI 元素(从而提高可重用性)的最佳方法是什么?

您可以执行的一个中间步骤是通过将 barButton 参数替换为对控制器的引用来将控制器转到 UI。

barButton.title = statusForCurrentVersion.message
->
self.controller.update(title: statusForCurrentVersion.message) 

这样,您的代码就可以增长(更新更多标签等),但它会带来更多代码和更难阅读的成本。

最新更新