在Swift中创建带有两个动态tableviewcells的标题的节

时间:2015-12-22 13:55:35

标签: ios swift uitableview

我有一个包含两个单元格的表视图,“electionInfo”和“candidate”。候选者返回一个候选数组,而electionInfo则给出一个文本正文(所以只有一个单元格)。我想将它们分成两个部分和它们各自的标题。现在,它给了我两个单元格的标题。我该如何解决?

谢谢!

我的代码......

@IBOutlet weak var table: UITableView!

    var info: [PFObject] = []
    var items: [PFObject] = []
    let titles = ["Election Info", "Candidates"]

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.items.count + 1
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        return self.items.count   
    }

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return titles[section]
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        if indexPath.row == self.items.count {

            let cell = table.dequeueReusableCellWithIdentifier("candidateCell") as! CandidateTableViewCell
            let candidate = items[indexPath.row]
            cell.candidateImage.file = candidate["image"] as! PFFile
            cell.candidateImage.loadInBackground()
            cell.candidateName?.text = candidate["name"] as! String
            cell.candidateParty?.text = candidate["partyAffiliation"] as! String

            return cell

    } else {

            let cell = table.dequeueReusableCellWithIdentifier("electionCell") as! ElectionInfoTableViewCell
            cell.electionInfo.text = "hey there"

        }
      }
    }

2 个答案:

答案 0 :(得分:2)

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

    return 2 //or the number of sections you have

}

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

      let cell = UITableViewCell()

      if indexPath.section == 0 {

      let candidateCell = table.dequeueReusableCellWithIdentifier("candidateCell") as! CandidateTableViewCell
      let candidate = items[indexPath.row]
      cell.candidateImage.file = candidate["image"] as! PFFile
      cell.candidateImage.loadInBackground()
      cell.candidateName?.text = candidate["name"] as! String
      cell.candidateParty?.text = candidate["partyAffiliation"] as! String

      return candidateCell

      } if indexPath.section == 1 {

      let electionCell = table.dequeueReusableCellWithIdentifier("electionCell") as! ElectionInfoTableViewCell
      cell.electionInfo.text = "hey there"

      return electionCell

     }

    return cell
}

然后您还要更改numberOfRowsInSection

 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows

    if section == 0 {

        return self.items.count 


    }
    if section == 1 {
         return self.items.count // or the number of rows you have in that section 


    }

 }

答案 1 :(得分:0)

一个部分和一个单元格在tableview中是不同的东西。现在,您的代码为您提供了部分而不是单元格,因为您在self.items.count + 1中返回了numberOfSectionsInTableView。解决这个问题;

由于您的tableview应仅包含两个部分,因此您必须在numberOfSectionsInTableView

中返回2或titles.count
func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    return self.titles.count   
}

接下来在numberOfRowsInSection

中返回相应的数组计数
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if section == 0{
        return self.info.count
    }else{
        return self.items.count
    }
}

最后在索引路径返回单元格的单元格中,基于以下部分返回单元格:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if indexPath.section == 1 {

        let cell = table.dequeueReusableCellWithIdentifier("candidateCell") as! CandidateTableViewCell
        let candidate = items[indexPath.row]
        cell.candidateImage.file = candidate["image"] as! PFFile
        cell.candidateImage.loadInBackground()
        cell.candidateName?.text = candidate["name"] as! String
        cell.candidateParty?.text = candidate["partyAffiliation"] as! String

        return cell

} else {

        let cell = table.dequeueReusableCellWithIdentifier("electionCell") as! ElectionInfoTableViewCell
        cell.electionInfo.text = "hey there"

    }
  }