我有存储在单元安排本地通知,包含标题,日期,UUID和心情的tableview。他们从用户选择并且完美地工作的那一天开始每周重复一次。我已成功排序的细胞,从而使最下行(最快)通知是在表视图的顶部通过这行代码在refreshList()
:
dqItems.sort(by: {$0.date < $1.date})
问题
然而,当通知已被解雇并且已逾期,通过if (dqItem.isOverdue)
函数将7天添加到其日期。这工作 - 7天添加到日期。但是tableview并没有对这些单元格重新排序 - 已经重新安排了7天的通知单元格仍然处于顶部!尽管有其他通知预定了更多的降序日期。 (见图像)
这是非常令人沮丧的,我无法设法找到解决方案。这里有一个Table View Controller
文件的片段。
//Outlets
var dqItems: [DQItem] = []
var MoodString = String()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
refreshList()
}
func refreshList() {
dqItems = DQList.sharedInstance.allItems()
dqItems.sort(by: {$0.date < $1.date})
tableView.reloadData()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dqItems.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "dqCell", for: indexPath) // retrieve the prototype cell (subtitle style)
var dqItem = dqItems[(indexPath as NSIndexPath).row] as DQItem
cell.textLabel?.text = dqItem.title as String!
if (dqItem.isOverdue)
{ // the current time is later than the to-do item's date
let newDate = Calendar.current.date(byAdding: .day, value: 7, to: dqItem.date)!
dqItem.date = newDate
dateFormatter.dateFormat = "EEEE's' 'at' HH:mm"
print("newdate", newDate) //seven days is added!
print("dqItem.d", dqItem.date) //same here
viewDidAppear(true) //reload the view to re-sort the cells??? = not working
}
cell.detailTextLabel?.text = dateFormatter.string(from: dqItem.date as Date)
return cell
}//End of cellforrowatindexPath
DQItem,其中结构是。
import UIKit
struct DQItem {
var title: String
var date: Date
var UUID: String
var mood: String
init(date: Date, title: String, UUID: String, mood: String) {
self.date = date
self.title = title
self.UUID = UUID
self.mood = mood
}
//Overdue function
var isOverdue: Bool {
return (Date().compare(self.date) == .orderedDescending) // date is earlier than current date
}
}
感谢所有帮助,试图解决这个愚蠢的问题!
试图将dqItems.sort(通过:{$ 0.date <$ 1.date})添加到函数中,而不是viewWillAppear - 无变化。请参阅我对问题的更新,以更清楚地解释问题。谢谢@philipMills – Mate
你也叫'reloadData'吗? –
是的,但是它创建了函数的循环,然后...这证实了代码未能使用新的7天+ dqItem.Date并替换已经被触发的旧代码的事实。有没有办法将过期的'Table View Cell'发送到'Table View'的底部?这也可以解决我的问题。 @philipMills – Mate