我在Xcode中创建了一个包含核心数据的项目。
我的NSManagedObjects模型带有" startDate"属性。 我还为我的模型添加了一些自定义函数,以便从" startDate"中获取月份和年份字符串:
func monthName() -> String {
let date = self.startDate!
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Month], fromDate: date)
var monthName: String = ""
switch components.month {
case 1:
monthName = "January"
case 2:
monthName = "February"
case 3:
monthName = "March"
case 4:
monthName = "April"
case 5:
monthName = "May"
case 6:
monthName = "June"
case 7:
monthName = "July"
case 8:
monthName = "August"
case 9:
monthName = "September"
case 10:
monthName = "October"
case 11:
monthName = "November"
case 12:
monthName = "December"
default:
monthName = "WRONG"
}
return monthName
}
func yearString() -> String {
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Year], fromDate: self.startDate!)
let stringFromYear = String(components.year)
return stringFromYear
}
我现在要做的是为部分创建自定义标题。
我的tableView由fetchedRestulsController管理(而sectionNameKeyPath设置为" monthName"。
我创建了名为" HeaderTableViewCell"的自定义文件。它包含" monthNameLabel"和#34; yearLabel"网点。
我设置了这样的标题:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCellWithIdentifier("SectionHeaderCell") as! HeaderTableViewCell
let dateString = self.fetchedResultsController?.sections![section].name
headerCell.monthNameLabel.text = dateString
return headerCell
}
它根据月份对我的日期进行分组。
我想编写一个代码,根据他们的月份和年份对我的日期进行分组,但我不知道该怎么做。
我是否已开始正确实施此操作?或者我可能完全错了?
答案 0 :(得分:0)
我设法得到了我想要的结果。
我将monthName和yearString函数合并为一个" dateName",所以我得到的字符串例如:" 2016年1月"。
然后我使用" dateName"作为fetchedResultsController中的sectionNameKeyPath。
然后在viewForHeaderInSection中我使用我的自定义单元格并按原样设置其monthNameLabel.text和yearLabel.text:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCellWithIdentifier("SectionHeaderCell") as! HeaderTableViewCell
let dateString = self.fetchedResultsController?.sections![section].name
let arrayOfString = dateString?.characters.split{$0 == " "}.map(String.init)
headerCell.monthNameLabel.text = arrayOfString![0]
headerCell.yearLabel.text = arrayOfString![1]
return headerCell
}
现在完美无缺:)