我有一个editviewcontroller(secondVC)(通过点击uitableviewcell任务可以访问),您可以选择设置提醒。设置提醒时;第一个VC中的UITableViewCell中的任务前面会出现一个图标。现在我希望在触发提醒并发送通知后,实时删除任务中的图标。目前,我设定它的方式;如果您在提醒任务后访问editVC,我会比较用户设置的当前时间,然后更新标签“Time is up”。
我希望第一个VC中的相应单元格出现类似的情况。
当时间结束时,它会告诉您时间已到,当您返回第一个VC时,会移除铃铛图标。但是我希望它实时发生,即使你在第一个VC中而且你不必去第二个VC然后返回到firstVC来获得更改。
简而言之,我希望在向第二个VC中设置的用户提醒任务时删除铃声图标。谢谢!
代码: 以下代码在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
}
答案 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。