2016-06-07 2 views
1

У меня есть tableView, у которого есть данные, упорядоченные по дате добавленной, от последней до самой старой. Я хочу добавить заголовок раздела, который отделяет/организует каждую из этих ячеек по дате. Я прикрепил изображение того, как Fitbit имеет заголовки разделов. Они делают свои разделы в недельные интервалы, но я хочу показать мои раздельные дни.Добавление даты в виде заголовка раздела в таблицеView

Это мой код и попытка на него, и он пока ничего не показывает, хотя добавление строки типа «Сегодня» показывает эту строку в этом разделе.

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? 
    ... 
} 

enter image description here

Любые идеи о том, как я могу сделай это? Благодарю.

+0

Ваш код не содержит каких-либо разделения данных, как на сегодняшний день. Сначала упорядочивайте свои данные, а затем заполняйте их в tableview. – NightFury

+0

Извинения. Я добавил NSFetchRequest, который показывает, как данные, полученные из Coredata, сортируются по дате (NSDate) - это один из атрибутов объекта. – Gugulethu

+0

Можете ли вы поделиться своим форматом exerciseDate? –

ответ

0

Вы можете сделать так

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" 
    } 
+0

Я пытаюсь выяснить последнюю дату (sDate!). Я не могу следовать, где это объявлено! – Gugulethu

+0

Я обновил код, пожалуйста, используйте это или используйте упражнение вместо sDate –

Смежные вопросы