gpt4 book ai didi

ios - 如何自定义单元格的一部分

转载 作者:行者123 更新时间:2023-11-29 06:01:46 25 4
gpt4 key购买 nike

有没有办法自定义单元格的一部分?可能最简单的方法是在 Storyboard中设计一个单元格,但我不知道如何在我的代码中实现它。

这就是我到目前为止所得到的。它非常基础,是从 youtube 上的教程复制的。因此,sectionData 应替换为自定义部分/子单元格的输入。

The upper cell should be the 'mainCell' and the cell below should be displayed after the mainCell is touched

import UIKit

struct cellData {
var opened = Bool()
var title = String()
var sectionData = [String]()
}

class ViewController: UITableViewController {

var tableViewData = [cellData]()


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
tableViewData = [cellData(opened: false, title: "Title1", sectionData: ["Cell1","Cell2","Cell3"]),
cellData(opened: false, title: "Title2", sectionData: ["Cell1","Cell2","Cell3"]),
cellData(opened: false, title: "Title3", sectionData: ["Cell1","Cell2","Cell3"]),
cellData(opened: false, title: "Title4", sectionData: ["Cell1","Cell2","Cell3"])]
}

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

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableViewData[section].opened == true {
return tableViewData[section].sectionData.count + 1
} else {
return 1
}
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let dataIndex = indexPath.row - 1

if indexPath.row == 0 {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {return UITableViewCell()}
cell.textLabel?.text = tableViewData[indexPath.section].title
return cell
} else {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {return UITableViewCell()}
cell.textLabel?.text = tableViewData[indexPath.row].sectionData[dataIndex]
return cell
}
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
if tableViewData[indexPath.section].opened == true {
tableViewData[indexPath.section].opened = false
let sections = IndexSet.init(integer: indexPath.section )
tableView.reloadSections(sections, with: .none)
} else {
tableViewData[indexPath.section].opened = true
let sections = IndexSet.init(integer: indexPath.section )
tableView.reloadSections(sections, with: .none)
}
}

}
}

最佳答案

https://www.appcoda.com/expandable-table-view/

您可以按照本教程进行操作。您可以使用以下代码重新加载要扩展的单元格。我已经在 `didSelectRowAt.将 ExpandCell 变量设置为 true 以在重新加载时更改单元格的高度。

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

// Expand View
self.expandCell = true
self.tableView.beginUpdates()
self.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
self.tableView.endUpdates()
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == expandRowIndex && self.expandCell {
return 200
}
return UITableViewAutomaticDimension
}

但是你问的问题与你想要实现的一次无关。无论如何,您的问题的答案是,您可以实现 viewForHeaderInSectionviewForFooterInSection 来自定义您的表格 View 部分。

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell = "create your custom cell here or you can init from your nib"
return cell
}

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

如果你想在 Storyboard中执行此操作,只需将 UITableViewCell 拖放到 tableview 中,并分配一些 reuserIdentifier 即可。在您的 viewForHeaderInSection

中调用此表格 View 单元格

关于ios - 如何自定义单元格的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54596929/

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