在iOS中加载表格视图数据时出现表格视图部分问题

时间:2019-12-19 13:23:15

标签: swift tableview

我试图从API响应中加载表视图中的数据,从API响应中获取数组并将其传递给表视图委托和数据源。我想在单个部分下显示数组的每个元素。我正在传递一个节数组,但是当我加载数据时,它会在一个节下显示多个元素。看起来就是这样 enter image description here

这是我的代码,用于显示数据,

func numberOfSections(in tableView: UITableView) -> Int {

    return headerArray.count
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

    return 35
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {


    let bgView = UIView()
    bgView.backgroundColor = #colorLiteral(red: 0.3221348226, green: 0.6953448653, blue: 0.9635410905, alpha: 1)
    bgView.layer.cornerRadius = 2.0
    let titleLbl = UILabel()
    titleLbl.frame = CGRect(x: 10, y: 10, width: 150, height: 20)
    titleLbl.text = headerArray[section]
    titleLbl.font = UIFont.systemFont(ofSize: 17, weight: .semibold)
    titleLbl.textColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    bgView.addSubview(titleLbl)

    return bgView
}

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

    if vcType == "SellerInProcess"
    {
        return propertyObject?.owners?.count ?? 0
    }
    else
    {
        return ownersList?.count ?? 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let owners = ownerArray[indexPath.row]
    if owners.userType != nil && owners.userType == Identity.OWNER  {
            let cell :  OwnerListTableViewCell! =  tableView.dequeueReusableCell(withIdentifier: "OwnerListTableViewCell", for: indexPath) as? OwnerListTableViewCell

            let ownerData = ownersList![indexPath.row]
            cell.ownerData = ownerData as? OwnerModel

            return cell
      }  
}

对于节数组,我是这样制作的,

 var i = 1
                self?.headerArray.removeAll()
                for _ in self?.ownersList ?? []
                {
                    let index = i + 0
                    i += 1
                    self?.print(i,index)
                    let sectionString = "Owner \(index)"
                    self?.headerArray.append(sectionString)
                }

我如何在单个部分下显示每个元素?

2 个答案:

答案 0 :(得分:0)

如果每个节中只需要一个单元格,则需要在numberOfRowsInSection方法中返回1或0(对于空节)。您还需要修改cellForRow部分,并使用indexPath.section作为数组索引来获取此部分的元素。

我也不会准备headerArray,因为您可以在viewForHeaderInSection内生成字符串,因为您将获得section变量并可以执行以下操作:let headerTitle = "Owner \(section + 1)" +1是因为索引从零开始计数。

答案 1 :(得分:0)

适当组织您的数据。

例如,创建类似

的模型
struct Section {
    let headerName : String
    let owner : WhateverItsTypeIs
}

并将您的数据映射到该模型的数组

var sections = [Section]()

然后在section.count中返回numberOfSections1中的0(或owner然后将numberOfRowsInSection设为可选)。

无论如何都不要使用多个数组作为数据源。