【发布时间】:2018-02-27 18:00:48
【问题描述】:
虽然我很确定这个问题有一个简单的解决方案,但这里的问题是 secondVC 与 firstVC 没有任何方式或形式分开。 secondVC 是当您点击 tableViewCell 时得到的。您点击的单元格(使用 indexPath)我将一些数据发送到 secondVC,然后您可以在 secondVC 中编辑该任务,甚至为其设置通知提醒。
在 secondVC 中,我正在运行一些代码,该代码会在用户为该特定任务设置的时间触发计时器。作为回报,计时器调用选择器方法更新标签并将其更改为“时间到了”。
当这个标签是“时间到了”时,我将 firstVC 中 tableviewcell 中的 bellicon 设置为白色或从特定任务中删除 bellicon。
即使我不在 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 的所有元素运行这段代码? bellicon 出现在您在 secondVC 中设置提醒的那些任务旁边。您可以通过点击表格视图中的相关单元格来访问 secondVC:
你在这个 secondVC 中设置了提醒。如果时间到了,则到期日期下方的标签更改为“时间到了”,特定任务的 belliconcolor 更改为 .white
时间到了! -> 这段代码已经被执行,这个特定任务的 belliconcolor 是 .white。当我去 firstVC 时,这一点会很明显。即使我在 firstVC 中,我也希望此代码能够运行,以便自动更新 tableview。
【问题讨论】:
-
我不清楚您的整体设计是什么,但您可以将计时器代码移到单独的对象中。它可以在需要更新时通知视图。
-
你能详细说明一下吗?
-
委托模式呢?您可以将 firstVC 设为 secondVC 的委托,并从 secondVC 调用委托方法。你可以在网上找到很多关于 Delegate 主题的文章。
标签: ios swift function uitableview uiviewcontroller