gpt4 book ai didi

ios - 如何使用自定义标题将单元格分成几个部分?

转载 作者:行者123 更新时间:2023-12-03 21:14:17 25 4
gpt4 key购买 nike

我想做的是按品牌将我的单元格分成几个部分

到目前为止,我能够做的是从 HomeVC 传递所选项目的数据来填充 CartVC 的单元格

我试图按品牌分隔各个部分,品牌数据是模型Items类的一部分(名称、品牌、imageUrl、价格和重量) Items 类从 CloudFirestore 检索数据以填充 HomeVC 的单元格

当传递到 CartVC 时,我如何能够按品牌将细胞分成部分。

到目前为止,我所做的似乎失败了,因为一旦我将一个项目从 HomeVC 传递到 CartVC,我只会得到一个标题单元格,其中包含我传递的第一个项目的品牌名称进入 CartVC。当我将更多数据传递到 CartVC 时,当我尝试按品牌划分所有 CartCell 时,所有单元格都保留在传递的第一个项目的部分中

 extension HomeViewController: UITableViewDelegate, UITableViewDataSource {

func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return itemSetup.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "HomeCell") as? HomeCell else { return UITableViewCell() }

let item = itemSetup[indexPath.row]
cell.configure(withItems: item)
cell.addActionHandler = { (option: Int) in
print("Option selected = \(option)")
self.tray.append(Tray(cart: item))
item.selectedOption = option
}

return cell
}

}
<小时/>
class CartViewController: UIViewController {

var items: ProductList!
var sectionModel: [SectionModel] = []
var tray: [Tray] = []

var groupedItems: [String: [Tray]] = [:]
var brandNames: [String] = []

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

groupedItems = Dictionary(grouping: tray, by: {$0.cart.brand})
brandNames = groupedItems.map{$0.key}.sorted()
}

}

extension CartViewController: UITableViewDataSource, UITableViewDelegate {

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CartCell", for: indexPath) as! CartCell

let cart = tray[indexPath.row]
cell.configure(withItems: cart.cart)

return cell
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cartHeader = tableView.dequeueReusableCell(withIdentifier: "CartHeader") as! CartHeader

cartHeader.storeName.text = "Brand: \(tray[section].cart.brand)"
return cartHeader
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 45
}
}
<小时/>
class Tray {
var cart: ProductList!

init(cart: ProductList) {

self.cart = cart
}
}

最佳答案

只需设置您的表格 View 功能,就可以按部分进行设置了

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let brand = brandNames[section]
return groupedItems[brand]!.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cartCell = tableView.dequeueReusableCell(withIdentifier: "CartCell") as! CartCell

let brand = brandNames[indexPath.section]
let itemsToDisplay = groupedItems[brand]![indexPath.row]
cartCell.configure(withItems: itemsToDisplay.cart)

return cartCell
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cartHeader = tableView.dequeueReusableCell(withIdentifier: "CartHeader") as! CartHeader

let headerTitle = brandNames[section]
cartHeader.brandName.text = "Brand: \(headerTitle)"

return cartHeader
}

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

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