【发布时间】:2017-04-06 06:24:29
【问题描述】:
情况
我有一个表格视图,其中存储在单元格中的预定本地通知,包含标题、日期、UUID 和心情。他们从用户选择的那一天开始每周重复一次,并且工作得很好。我已经成功地对单元格进行了排序,以便通过refreshList() 中的这行代码,最降序(最快)的通知位于表格视图的顶部:
dqItems.sort(by: {$0.date < $1.date})
问题
但是,当通知已被触发并过期时,将通过 if (dqItem.isOverdue) 函数将其日期添加 7 天。这有效 - 7 天被添加到日期。但是 tableview 不会重新排序单元格 - 已经重新安排了 7 天的通知单元格仍然在顶部!尽管有其他通知安排了更多的降序日期。 (以图片为例)
这非常令人沮丧,我无法找到解决方案。这是来自Table View Controller 文件的sn-p。
//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
}
}
感谢所有尝试解决这个愚蠢问题的帮助!
【问题讨论】:
标签: swift xcode uitableview nsdate cell