[英]How to update a UITableViewCell in firstVC when a change occurs in secondVC automatically and in realtime
我有一個editviewcontroller(secondVC)(您可以通過點擊uitableviewcell任務來訪問它),在這里您可以選擇設置提醒。 設置提醒時; 在firstVC中的UITableViewCell中,任務前會出現一個圖標。現在,我希望一旦觸發提醒並發送通知,就可以實時刪除任務中的圖標。 目前,我的設置方式; 如果在提醒任務后訪問了editVC,我會將當前時間與用戶設置的時間進行比較,然后更新一個標簽,上面寫着“時間到了”。
我希望firstVC中的適當單元格發生類似的情況。
時間到了,它會告訴您時間到了,當您返回第一個VC時,響鈴圖標將被刪除。 但是我希望它實時發生,即使您在firstVC中,也不必轉到secondVC然后返回firstVC來獲取更改。
簡而言之,我希望在第二個VC中設置的任務提醒用戶時刪除響鈴圖標。 謝謝!
代碼:在viewDidLoad中的editVC中執行以下代碼。 如果當前時間大於所選時間,它將針對該特定提醒將標簽更改為“時間到”,並將鍾形調顏色更改為白色。
guard let selectedDate = editnotes?.sSelectedDate,
var needsToRemind = editnotes?.sReminderState else {
print("nil")
return
}
if selectedDate <= Date() && needsToRemind {
editnotes?.sReminderDate = "Time's up"
editnotes?.belliconcolor = .white
reminderMsg.text = editnotes?.sReminderDate
}
您可以用來觸發發布通知。發布通知用於執行操作,而無需轉到特定的VC。
您知道發布通知或通知中心嗎? 如果是,那么很容易在您的代碼中實現,否則您需要對其進行一些研發。 首先,在第一個vc上注冊發布通知,然后在secondvc上觸發在第一個vc上注冊的通知。 這很簡單。 如果您無法獲得它,那么我將發送一些代碼以輕松獲得它。
您可以在定時器停止時觸發。 還有一件重要的事情是,當您發出通知時,您必須需要經過當前的停止時間。 因為這個時間是用來第一個vc方法注冊的。 在此方法中,您可以比較提醒時間和通知所傳遞的當前時間(如果兩者相同),則可以隱藏響鈴,否則可以隱藏。 還有一件事,請在重新加載表后管理數組以准確編碼。
我可以立即看到的代碼問題是,您只能在編輯VC的viewDidLoad
說“時間到了”。 如果在viewDidLoad
之后幾秒鍾(甚至一秒鍾)時間到了,該怎么辦?
如果這是我的代碼,我想有一個Timer
上都 editVC和家長(或第一)視圖控制器屬性。 它看起來像這樣:
var timesUpTimer : Timer?
您可以在viewWillAppear
進行設置:
if let selectedDate = editnotes?.sSelectedDate
{
self.timesUpTimer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(doSomething), userInfo: nil, repeats: false)
RunLoop.main.add(timesUpTimer, forMode: RunLoopMode.commonModes)
}
// in the editVC you can have this:
func doSomething()
{
editnotes?.sReminderDate = "Time's up"
editnotes?.belliconcolor = .white
reminderMsg.text = editnotes?.sReminderDate
}
並且您將在firstVC中的doSomething
執行適當的操作。
同樣,在每個視圖控制器的viewWillDisappear
中,您需要使Timer屬性無效並將其Timer屬性設置為nil。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.