繁体   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