簡體   English   中英

如何自動並實時在secondVC中發生更改時如何在firstVC中更新UITableViewCell

[英]How to update a UITableViewCell in firstVC when a change occurs in secondVC automatically and in realtime

我有一個editviewcontroller(secondVC)(您可以通過點擊uitableviewcell任務來訪問它),在這里您可以選擇設置提醒。 設置提醒時; 在firstVC中的UITableViewCell中,任務前會出現一個圖標。現在,我希望一旦觸發提醒並發送通知,就可以實時刪除任務中的圖標。 目前,我的設置方式; 如果在提醒任務后訪問了editVC,我會將當前時間與用戶設置的時間進行比較,然后更新一個標簽,上面寫着“時間到了”。

我希望firstVC中的適當單元格發生類似的情況。

FIRSTVC FIRSTVC

時間到了,它會告訴您時間到了,當您返回第一個VC時,響鈴圖標將被刪除。 但是我希望它實時發生,即使您在firstVC中,也不必轉到secondVC然后返回firstVC來獲取更改。

簡而言之,我希望在第二個VC中設置的任務提醒用戶時刪除響鈴圖標。 謝謝!

EditVC: 在此處輸入圖片說明

代碼:在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM