gpt4 book ai didi

ios - 可扩展的 Tableview 与 sectionHeader 一起使用

转载 作者:行者123 更新时间:2023-11-28 23:22:06 25 4
gpt4 key购买 nike

我正在尝试使用 Expandable Tableview 加载我的不同 Controller ,但我的标题 View 已设置作为切换条件

对于 Header XXX1 -> 两个子菜单 a 和 b ..对于 Header XXX2-> 子菜单 c但是对于 Header XXX3 没有子菜单,所以我将使用 XXX3 单击(当前使用检查 SectionData.count == 0 )但是对于多个如何管理..检查我的代码

 sectionNames = ["xxxx1","xxxx2","xxx3","xxxx4"] //this is main header
sectionItems = [ ["a","b"],[c],[],[],[],[],[],[]]// This is sub menu items

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

if (self.expandedSectionHeaderNumber == section) {
let arrayOfItems = self.sectionItems[section] as! NSArray
return arrayOfItems.count;
} else {
return 0;
}
//return arraylist.count
}


func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if (self.sectionNames.count != 0) {
return self.sectionNames[section] as? String
}
return ""
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 60.0;
}

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 50))
return footerView
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.5

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifer, for: indexPath)
let section = self.sectionItems[indexPath.section] as! NSArray
cell.textLabel?.textColor = UIColor.black
cell.textLabel?.text = section[indexPath.row] as? String
return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

if indexPath.row == 0 {

}


let indexPath = tableView.indexPathForSelectedRow
// print(indexPath as Any)

//getting the current cell from the index path
let currentCell = tableView.cellForRow(at: indexPath!)! as UITableViewCell
// print(currentCell as Any)

//getting the text of that cell
let currentItem = currentCell.textLabel!.text
print(currentItem!)

switch currentItem {
case "XXXX1":
//// Here unable to do any work
break
case "a":
APICalla()
case "b":
APICallb ()
default:
break
}
return
}

Using this link

最佳答案

抱歉,这个教程很差。

Swift 是一种面向对象的语言,因此使用自定义模型,一个通用的 Section 对象,带有 nameitems 以及该部分的信息折叠了

class Section<T> {
var name : String
var items = [T]()

var isCollapsed = false

init(name : String, items : [T] = []) {
self.name = name
self.items = items
}
}

以及一个合适的结构,用于带有标题和闭包的项目,将在 didSelect

中调用
struct Item {
let title : String
let selectorClosure : (() -> Void)?
}

与其使用多个数组一致地填充数据源数组

var sections = [Section<Item>(name:"xxxx1", items: [Item(title: "a", selectorClosure: APICalla), Item(title: "b", selectorClosure: APICallb)]),
Section<Item>(name:"xxxx2", items: [Item(title: "c", selectorClosure: APICallc)]),
Section<Item>(name:"xxxx3")]

numberOfRowsInSection 中根据 isCollapsed 返回正确数量的项目

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let currentSection = sections[section]
return (currentSection.isCollapsed) ? 0 : currentSection.items.count
}

cellForRow 中不要使用 typeless 基础集合类型

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifer, for: indexPath)
let item = sections[indexPath.section].items[indexPath.row]
cell.textLabel?.textColor = UIColor.black
cell.textLabel?.text = item.title
return cell
}

在折叠/展开部分的方法中,只需切换 isCollapsed

let currentSection = sections[section]
currentSection.isCollapsed.toggle()

并执行动画


titleForHeaderInSection 也简单多了

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sections[section].name
}

didSelectRow 中,从不 View (单元格)获取任何数据>model(数据源数组)并调用选择器闭包。有了这个逻辑,就不需要开关了。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
let item = sections[indexPath.section].items[indexPath.row]
item.selectorClosure?()
}

关于ios - 可扩展的 Tableview 与 sectionHeader 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59486603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com