0
我想要使用Swift更新iOS上用戶界面元素的title
屬性。在這種情況下,它是一個UIBarButton,但它可能是UILabel,UIButton或其他。目前我使用這個代碼,其中的工作原理:在Swift中動態更新標籤/按鈕標題
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元素(從而提高可重用性)?你可以做
我做了一些實驗,但沒有成功。這個'controller'實例是什麼? XCode給我錯誤,它不知道'controller',這對我來說是有意義的,但是使它成爲當前UIViewController的一個實例也沒有幫助... – Pieter