簡體   English   中英

在firstVC中時,如何在secondVC中運行功能?

[英]How to run a function in a secondVC when you are in firstVC?

雖然我非常確定可以解決此問題的簡單方法,但這里的問題是,secondVC絕對不會與形式或形式與firstVC分開。 第二個VC是您點擊tableViewCell時獲得的。 您點擊的單元格(使用indexPath)將一些數據發送到secondVC,然后您可以在secondVC中編輯該任務,甚至為其設置通知提醒。

在secondVC中,我正在運行一些代碼,該代碼在用戶為特定任務設置的時間觸發計時器。 反過來,計時器將調用選擇器方法,該方法將更新標簽並將其更改為“時間到”。

當此標簽為“ Time's Up”時,我將firstVC的tableviewcell中的鍾形圖標設置為白色,或從特定任務中刪除該鍾形圖標。

即使我不在secondVC中,我也希望運行這段代碼。 (我在viewDidAppear中運行此代碼)。 如果我將此代碼放入函數中,然后在firstVC中調用它,則該代碼不知道應該選擇哪個時間。

override func viewWillAppear(_ animated: Bool) {
adjustTextViewHeight()
edittaskview.becomeFirstResponder()
cardremindery?.constant = -999

guard let selectedDate = editnotes?.sSelectedDate,
    var needsToRemind = editnotes?.sReminderState  else {
        print("No date selected")
        return
}
if (needsToRemind) {
    self.timesUpTimer = Timer(fireAt: selectedDate, interval: 0, target: self, selector: #selector(updateTimeLabel), userInfo: nil, repeats: false)
    RunLoop.main.add(timesUpTimer!, forMode: RunLoopMode.commonModes)
}


}

更新belliconcolor的選擇器代碼:

@objc func updateTimeLabel()
{
  editnotes?.sReminderDate = "Time's up"
  editnotes?.belliconcolor = .white
  reminderMsg.text = editnotes?.sReminderDate
  print("Time is up ok")
}

當您在secondVC中時,上面的代碼有效。 我希望即使我在firstVC中也能正常工作。 由於我使用的是FetchedResultsController,因此我非常確定如果更改了數據,則會更新tableView,並且由於belliconcolor是我保存在coreData中的元素,因此它會更新tableview。

問題是:如何從firstVC中為tableview的所有元素運行這段代碼? 該鍾形圖標出現在您在secondVC中設置提醒的那些任務的旁邊。 您可以通過點擊表視圖中的相關單元格來訪問secondVC: 在此處輸入圖片說明

您可以在第二個VC中設置提醒。 如果時間已到,則“到期日期”下方的標簽將更改為“時間已到”,特定任務的.white改為.white

在此處輸入圖片說明

時間到! ->該代碼段已執行,此特定任務的belliconcolor為.white。 當我轉到firstVC時,這將很明顯。 我希望即使我在firstVC中也要運行此代碼,以便自動更新tableview。 在此處輸入圖片說明

通常,有兩種方法可以做到這一點:

  1. 使用NotificationCenter。
  2. 使用委托模式。

他們兩個都可以工作。 如何選擇將是一個正確的問題。 回答這個問題可能會有所幫助。

通常,如果我只希望2個對象之間只有1個連接,則通常使用Delegate。 如果要在應用程序中通知許多對象,請使用NotificationCenter。

希望能幫助到你。 讓我知道是否有不清楚的地方,我會嘗試解釋。

更新:

再次閱讀它,是的,如果您離開該屏幕,則SecondVC中的Notifications / Delegate將不起作用。 離開屏幕將取消初始化您在那里的所有內容。 因此,您需要一些單例類,這些單例類將一直保存在內存中。 所以。 從SecondVC中,您將計時器設置為單例,稍后將單例觸發到FirstVC的Notifications / Delegates(或您可能需要的其他任何地方)。

我在這里找到了關於stackoverflow的精彩討論,該討論提出並解釋了您所遇到的問題類型的許多解決方案,即在View Controller之間傳遞數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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