需要根据数组计数获得实现表视图部分的逻辑

Need to get a logic for implementing the tableview sections according to array count

我的情况是我有三种不同类型的数组,它们可能包含也可能不包含值。我的表格视图有 3 个部分,部分 headers。我无法找到动态设置部分的解决方案,即,如果我的数组之一没有值,那么我不想显示该部分。如果 3 个数组具有值,则显示这 3 个部分,或者如果任何一个数组没有值,那么我不想显示该部分。

您的 numberOfSections 将是数组的数量。 numberOfRowsInSection 将是您的 tableViewDataSource 中该部分的每个数组的计数。

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
    if section == 0 {
        return array1.count
    } else if section == 1 {
        return array2.count
    } else {
        return array3.count
    }
    
}

如果数组中没有项目,则该部分的行将为零。

你可以这样做

// Create enum for simplifying the implementation.

enum SectionType{
case type1
case type2
case type3
}

class TestVC: UIViewController {
// create to show sections only when data is available
var sections: [SectionType] = []
// create you array types
var array1 = [String]()
var array2 = [String]()
var array3 = [String]()
@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    tableView.dataSource = self
    // Add enums to section only when array has some value
    // You can do this when you get API data
    if array1.count > 0{
        sections.append(.type1)
    }
    if array2.count > 0{
        sections.append(.type2)
    }
    if array3.count > 0{
        sections.append(.type3)
    }
}

}
extension TestVC: UITableViewDataSource{
func numberOfSections(in tableView: UITableView) -> Int {
    // only those sections with data wil be visible
    return sections.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
    switch sections[section]{
        
    case .type1:
        return array1.count
    case .type2:
        return array2.count
    case .type3:
        return array3.count
        
    }
    
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    switch sections[indexPath.section]{
        // return different type of cells if required accourding to the data in array
    case .type1, .type2, .type3:
        return UITableViewCell()
    

    }

}
  }

如果数组可以动态改变(加载视图后),您可以实现这样的部分数:

func numberOfSections(in tableView: UITableView) -> Int {
  var numberOfSections = 0
  if array1.count > 0 { numberOfSections++ }
  if array2.count > 0 { numberOfSections++ }
  if array3.count > 0 { numberOfSections++ }
  return numberOfSections 
}

您的数据源应如下所示 - sectionModels = [[cellModels]] 外部数组表示部分的数量,内部数组表示该部分中的单元格数量。

func numberOfSections(in tableView: UITableView) -> Int {
    return sectionModels.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return sectionModels[section].count            
}
    
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellModel = sectionModels[indexPath.section][indexPath.row]
    // Configure UITableViewCell with cellModel
    }
}