如果在secondVC中自动且实时地发生更改,如何在firstVC中更新UITableViewCell

时间:2018-02-23 19:46:26

标签: ios swift function uitableview unusernotificationcenter

我有一个editviewcontroller(secondVC)(通过点击uitableviewcell任务可以访问),您可以选择设置提醒。设置提醒时;第一个VC中的UITableViewCell中的任务前面会出现一个图标。现在我希望在触发提醒并发送通知后,实时删除任务中的图标。目前,我设定它的方式;如果您在提醒任务后访问editVC,我会比较用户设置的当前时间,然后更新标签“Time is up”。

我希望第一个VC中的相应单元格出现类似的情况。

FIRSTVC FIRSTVC

当时间结束时,它会告诉您时间已到,当您返回第一个VC时,会移除铃铛图标。但是我希望它实时发生,即使你在第一个VC中而且你不必去第二个VC然后返回到firstVC来获得更改。

简而言之,我希望在向第二个VC中设置的用户提醒任务时删除铃声图标。谢谢!

EditVC: enter image description here

代码: 以下代码在viewDidLoad中的editVC中执行。如果当前时间超过所选时间,则会将标签更改为“Time's Up”,并将该bellicon tintcolor更改为白色以进行该特定提醒。

      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

    }

4 个答案:

答案 0 :(得分:1)

您可以使用触发帖子通知。邮件通知用于执行操作而无需转到特定的VC。

答案 1 :(得分:1)

您是否知道发布通知或通知中心?如果是,那么很容易在您的代码中实现,否则您需要一些R&amp; D。首先,在第一个vc上注册帖子通知,然后在secondvc上注册这个在第一个vc上注册的通知。这很简单。如果你不能得到它,那么我将发送一些代码,以便轻松获得它。

答案 2 :(得分:1)

您的计时器停止时可以开火。还有一个重要的事情是,当你发出通知时,你必须要通过当前的停止时间。因为这个时间用于第一个注册的vc方法。在这种方法中,你可以比较你的提醒时间和你通知的当前时间,如果两者相同,那么你可以隐藏铃声,否则不能。还有一件事,请在重新加载表之后管理数组以准确代码。

答案 3 :(得分:0)

我可以立即看到您的代码存在的一个问题是,您只会说&#34; Time&#39;&#39;在您的编辑VC viewDidLoad中。如果时间在viewDidLoad之后几秒钟(甚至一秒钟),会发生什么?

如果这是我的代码,我会在 BOTH editVC和父(或第一个)视图控制器上拥有Timer属性。它看起来像这样:

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
}

你会在第一个VC中的doSomething中做适当的事情。

此外,在每个视图控制器的viewWillDisappear中,您需要使Timer属性无效并将其设置为nil。