2

我有一个 tableView,其中包含按添加日期组织的数据,从最新到最旧。我想添加一个节标题,按日期分隔/组织每个单元格。我附上了一张 Fitbit 如何拥有其部分标题的图片。他们每隔一周做他们的部分,但我想以天为单位展示我的部分。

这是我的代码并尝试使用它,尽管添加像“Today”这样的字符串会在该部分中显示该字符串,但它现在没有显示任何内容。

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        if let sections = fetchedProgressResultController.sections {

            return sections.count
        }

        return 0

    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if let numberOfObjects = fetchedProgressResultController.sections?[section].numberOfObjects {

            return numberOfObjects

        }

        return 0

    }

//MARK: Section Headers
    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        if let numberOfObjects = fetchedProgressResultController.sections?[section].indexTitle {

            return numberOfObjects

        }

        return nil

        //return "TODAY"
    }

    override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

        let header = view as! UITableViewHeaderFooterView
        header.textLabel?.font = UIFont(name: "SFUIText-Semibold", size: 15)
        header.textLabel?.textColor = UIColor(fromHexString: "3A3E44")

    }

以下是显示按日期排序的 NSFetchRequest 函数。

//MARK: Progress Model Fetch Function
    func progressReportFetchRequest() -> NSFetchRequest {

        let fetchRequest = NSFetchRequest(entityName: "ProgressModel")
        let sortDescriptor = NSSortDescriptor(key: "exerciseDate", ascending: false) //From latest to Oldest
        fetchRequest.sortDescriptors = [sortDescriptor]
        return fetchRequest


    }

    func getProgressReportFetchedResultsController() -> NSFetchedResultsController {

        let fetchedProgresssResultController = NSFetchedResultsController(fetchRequest: progressReportFetchRequest(), managedObjectContext: managedProgressObjectContext, sectionNameKeyPath: nil, cacheName: nil)

        return  fetchedProgresssResultController

    }

这是我的 cellForRowAtIndexPath 函数,显示了如何提取数据

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    //Access the different Elements daysOfWeek Array
    let progressItems = fetchedProgressResultController.objectAtIndexPath(indexPath) as! ProgressModel

    var progressReportCells : ProgressReportTableViewCell! = tableView.dequeueReusableCellWithIdentifier("ProgressReportTableViewCell") as? ProgressReportTableViewCell

    if (progressReportCells == nil) {
        tableView.registerNib(UINib(nibName: "ProgressReportTableViewCell", bundle: nil), forCellReuseIdentifier:"ProgressReportTableViewCell")
        progressReportCells = tableView.dequeueReusableCellWithIdentifier("ProgressReportTableViewCell") as? ProgressReportTableViewCell

    }

    progressReportCells.workoutTitle.text = progressItems.exerciseName

    //Subtitle
    progressReportCells.workoutDetails.text = "\(progressItems.distanceOrReps!) \(unitsDefaults.stringForKey(kCCDistanceKeyMetric)!)   |   \(progressItems.durationOrSets!) min"

    //Image
    progressReportCells.backgroundImage.image = UIImage(data: progressItems.backgroundExerciseImage!, scale: 1.0)
    progressReportCells.backgroundImage.layer.masksToBounds = true
    progressReportCells.backgroundImage.clipsToBounds = true


}

这就是我的模型的组织方式

extension ProgressModel {
    ....
    @NSManaged var backgroundExerciseImage: NSData?
    @NSManaged var distanceOrReps: String?
    @NSManaged var exerciseDate: NSDate?
    @NSManaged var exerciseName: String?
    ...
}

在此处输入图像描述

关于我该怎么做的任何想法?谢谢。

4

1 回答 1

1

你可以这样做

 override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        if let numberOfObjects = fetchedProgressResultController.sections?[section].indexTitle {

    let df = NSDateFormatter()
    df.dateFormat = "yyyy-MM-DD" // Date format for exerciseDate
   let exerciseDate = df.dateFromString(numberOfObjects)
  let currentDate = NSDate()
let result = NSCalendar.currentCalendar().compareDate(currentDate, toDate: exerciseDate!,
                                                              toUnitGranularity: .Day)
        let TommorrowDate = currentDate.dateByAddingTimeInterval(60 * 60 * 24)
        let result1 = NSCalendar.currentCalendar().compareDate(TommorrowDate, toDate: exerciseDate!,
                                                               toUnitGranularity: .Day)

        if result == NSComparisonResult.OrderedSame
        {

            return "TODAY"

        }
        if result1 == NSComparisonResult.OrderedSame
        {

            return "TOMMORROW"


        }

        let df1 = NSDateFormatter()
        df1.dateFormat = "dd MMMM, yyyy"


            return df1.stringFromDate(exerciseDate!)

        }

        return nil

        //return "TODAY"
    }
于 2016-06-07T07:22:42.710 回答