UITableView部分标题

时间:2017-03-12 02:21:37

标签: ios uitableview

我正在尝试使用Parse对象中的部分创建一个UITableView。我成功地拥有了Parse对象。但是,我不确定从对象中获取日期以创建我的部分标题的最佳方式是什么或者是什么。

如果我有一个对象数组,我应该通过并创建一个日期列表?我如何将其与日期联系起来,并且该对象应该在该日期之下

我正在考虑使用带有Date和Item变量的结构来保持数据更清晰,但我不知道我可以这样做吗

有关最佳方法的建议/示例吗?

编辑:

 func getExpenses() {
    let query = ExpenseItem.query()
    query?.order(byDescending: "expenseDate")
    query?.findObjectsInBackground(block: { (expenseResult, error) in
        if error == nil {

            var sectionArray = [ExpenseItem]()

            for object in expenseResult as! [ExpenseItem] {
                if let firstObject = sectionArray.first {
                    if Calendar.current.compare(firstObject.expenseDate, to: object.expenseDate, toGranularity: .day) != .orderedSame {
                        self.tableData.append(sectionArray)
                        sectionArray = [ExpenseItem]()
                    }
                } else {
                    sectionArray.append(object)
                }
            }

            if sectionArray.count != 0 {
                self.tableData.append(sectionArray)
            }
        }
    })
}

1 个答案:

答案 0 :(得分:0)

  1. 按日期从Parse按升序对数组数据进行排序。
  2. 声明PFObject数组的数组(或者你的PFObject子类,如果有的话):var tableData: [[PFObject]]()
  3. 遍历您的Parse数据,按日期拆分:
  4. var sectionArray = [PFObject]()
    // pfObjects contains the objects you retrieved from Parse, ordered by date
    for object in pfObjects {
       if let firstObject = sectionArray.first {
           if object["dateField"] != firstObject["dateField"] {
               self.tableData.append(sectionArray)
               sectionArray = [PFObject]()
           }
       }
       sectionArray.append(object)
    }
    if sectionArray.count != 0 {
        self.tableData.append(sectionArray)
    }
    
    1. 现在您拥有所需的数据结构。部分的数量是外部数组的计数,每个部分中的项目数是每个内部数组中的项目数:
    2.  override func numberOfSections(in tableView: UITableView) -> Int {
           return self.tableData.count
       }
      
        override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return self.tableData[section].count
        }
      
        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let item = self.tableData[indexPath.section][indexPath.row]
      
            // deque a cell and configure it with item
      
        }
      

      要获取每个部分的部分标题,您可以使用该部分数组中第一个对象的日期,因为该部分中的所有对象具有相同的日期。