[英]How to update a UITableViewCell in firstVC when a change occurs in secondVC automatically and in realtime
我有一个editviewcontroller(secondVC)(您可以通过点击uitableviewcell任务来访问它),在这里您可以选择设置提醒。 设置提醒时; 在firstVC中的UITableViewCell中,任务前会出现一个图标。现在,我希望一旦触发提醒并发送通知,就可以实时删除任务中的图标。 目前,我的设置方式; 如果在提醒任务后访问了editVC,我会将当前时间与用户设置的时间进行比较,然后更新一个标签,上面写着“时间到了”。
我希望firstVC中的适当单元格发生类似的情况。
时间到了,它会告诉您时间到了,当您返回第一个VC时,响铃图标将被删除。 但是我希望它实时发生,即使您在firstVC中,也不必转到secondVC然后返回firstVC来获取更改。
简而言之,我希望在第二个VC中设置的任务提醒用户时删除响铃图标。 谢谢!
代码:在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.