UITableView未来30天的单元格RowAt indexPath事件



我下面有这个带有伊斯兰日期的代码(仅限月份和日期(。我想做的是在我的表视图中为未来30天的事件创建一行。我试过下面的,但不起作用。我知道我显然是一个初学者,在这里做了一些非常错误的事情,但我只是不确定如何正确地做。

var calendarDataSource = [
"08/02": "SomeData",
"08/03": "SomeData",
"08/04": "SomeData",
"08/05": "SomeData",
"08/06": "SomeData",
"08/07": "SomeData",
"08/08": "SomeData",
"08/09": "SomeData",
"08/10": "SomeData",
"08/11": "SomeData",
"08/12": "SomeData",
"08/13": "SomeData",
"08/14": "SomeData",
"08/15": "SomeData"
]


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "calendarTVC") as! CalendarTableViewCell

formatter.dateFormat = "yyyy MM dd"
let islamicFormatter = DateFormatter()
islamicFormatter.dateFormat = "MM/dd"
islamicFormatter.calendar = Calendar(identifier: .islamic)
let gregorianFormatter = DateFormatter()
gregorianFormatter.calendar = Calendar(identifier: .gregorian)
gregorianFormatter.dateStyle = .short
gregorianFormatter.dateFormat = "yyyy MM dd"

for index in 0...29 {
let nextdate = Calendar.current.date(byAdding: .day, value: index, to: Date())
let dayInt = Calendar.current.component(.day, from: nextdate!)
let monthInt = Calendar.current.component(.month, from: nextdate!)
let yearInt = Calendar.current.component(.year, from: nextdate!)
print(date)
let dateString = "(yearInt) (monthInt) (dayInt)"
if let date = gregorianFormatter.date(from: dateString) {
let islamicString = islamicFormatter.string(from: date)
if calendarDataSource[islamicString] == dateString {
cell.TVDayLabel.text = Array(calendarDataSource.keys)[indexPath.row]
cell.TVEventLabel.text = Array(calendarDataSource.values)[indexPath.row]
} else {
print("no event")
}
}
}
return cell
}

编辑:添加此操作的结果链接到图像

我认为问题出在核心循环中。伊斯兰字符串的格式类似于08/12,但日期字符串的格式是202049。他们将永远不会一样。我认为你想计算当天的IslamicString,看看它在你的CalendarDataSource中是否有任何数据。像这样:

if let date = gregorianFormatter.date(from: dateString) {
let islamicString = islamicFormatter.string(from: date)
if calendarDataSource[islamicString] != nil {
cell.TVDayLabel.text = Array(calendarDataSource.keys)[indexPath.row]
cell.TVEventLabel.text = Array(calendarDataSource.values)[indexPath.row]
} else {
print("no event")
}

更改

formatter.dateFormat = "yyyy MM dd"

带有

formatter.dateFormat = "yyyy/MM/dd"

gregorianFormatter.dateFormat = "yyyy MM dd"

带有

gregorianFormatter.dateFormat = "yyyy/MM/dd"

最新更新