需要根据数组计数获得实现表视图部分的逻辑
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
}
}
我的情况是我有三种不同类型的数组,它们可能包含也可能不包含值。我的表格视图有 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
}
}