- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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
}
最佳答案
抱歉,这个教程很差。
Swift 是一种面向对象的语言,因此使用自定义模型,一个通用的 Section
对象,带有 name
、items
以及该部分的信息折叠了
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/
我想在我的 Tableview 的 sectionHeader 中显示名称和其他一些简短信息。 有些名称非常大,所以放不下,有没有办法像在标签中那样自动调整 sectionHeader 中的字体大小:
升级到iOS 11后,痛苦的事情多起来了,以前版本没有的出现问题的代码,经过Xcode 9一编译,千万草泥马奔腾而过; 今天碰到一个奇葩问题,直接进入主题: 问题描述:
我已经实现了一个带有部分标题的 tableView,当点击时展开单元格。它几乎只是节标题上的一个大按钮,按下它时我会计算需要删除哪些单元格,然后调用: [tableView beginUpdates]
我向节标题添加了一个按钮,但只有第一个按钮有效。 其他按钮既不显示触摸动画也不发送 Action 。 - (UIView *)tableView:(UITableView *)tableView vi
像 Iphone 中的这个 View ,我需要为 android 设计 View 。 ListView 包含部分索引和部分标题。请帮助。 最佳答案 尝试安装这个应用程序,我最确定应用程序中存在一个库项
我正在尝试使用 Expandable Tableview 加载我的不同 Controller ,但我的标题 View 已设置作为切换条件 对于 Header XXX1 -> 两个子菜单 a 和 b .
我为我的 UITableview 创建了一个自定义的 sectionHeader。 有时我必须用大文本填充它,所以我添加了 adjustsFontSizeToFitWidth = true 这通常有效
我创建了一个带有 UIView 的自定义 XIB 文件,我希望将其显示在 UITableView 中。作为部分标题的 View 。我正确地实现了所需的委托(delegate)方法,当然: - (UIV
我想以 Date 为 SectionHeader 显示 ListView。 我有什么: 我正在使用自定义 SimpleCursorAdapter 从 sqlite 数据库中显示 ListView。 我
IGListKit 库链接:https://github.com/Instagram/IGListKit 我正在使用 IGListKit 制作不同的截面单元格。我成功地完成了这项任务,但我无法使用 i
我是一名优秀的程序员,十分优秀!