gpt4 book ai didi

arrays - 如何使用具有多个子类别的 TableView Controller

转载 作者:行者123 更新时间:2023-11-28 11:30:46 24 4
gpt4 key购买 nike

我有一个 UITableView,我想添加几个类别。

我的数据看起来有点像这样:

  • 主要类别 A
    • 子类别红色
      • 子类别 X
        • 子子子类
      • 子类 Y
    • 子类别蓝色
  • 主要类别 B
    • 子类别红色
      • 子子类别 X
      • 子类 Y
    • 子类别蓝色
      • 子子类别 X
    • 子类别绿色

第一个屏幕应该显示所有 MainCategories,然后如果我点击 A,它应该显示 SubCategory Red 和 Blue,等等...

我到处搜索,但找不到解决方案。

我应该如何构建我的数据才能使其发挥作用? cellForRowAt 只为您提供了为第一组子类别提供数据的选项。其余的数据放在哪里?

最佳答案

enter image description here

创建一个带有标题和 Menu 对象数组的结构 Menu。

struct Menu {
var title: String
var subMenus: [Menu]?
}

在要启动菜单的 View Controller 中添加菜单详细信息。并使用菜单对象推送一个 UITableViewController。如果按下子菜单,则推送带有子菜单对象的 UITableViewController

//ViewController.swift

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

}
@IBAction func startMenuAction(_ sender: UIButton) {
let red1 = Menu(title: "SubCategory Red", subMenus: [Menu(title: "SubSubCategory X", subMenus: [Menu(title: "SubSubSubCategory", subMenus: nil)]),
Menu(title: "SubSubCategory Y", subMenus: nil)])
let blue1 = Menu(title: "SubCategory Blue", subMenus: nil)

let red2 = Menu(title: "SubCategory Red", subMenus: [Menu(title: "SubSubCategory X", subMenus: nil),
Menu(title: "SubSubCategory Y", subMenus: nil)])
let blue2 = Menu(title: "SubCategory Blue", subMenus: [Menu(title: "SubSubCategory X", subMenus: nil)])
let green2 = Menu(title: "SubCategory Green", subMenus: nil)

let categories = [Menu(title: "MainCategory A", subMenus: [red1, blue1]), Menu(title: "MainCategory B", subMenus: [red2, blue2, green2])]

let mainMenu:Menu = Menu(title: "My Menu", subMenus: categories)

let menuVC = MenuVC()
menuVC.currentMenu = mainMenu
self.navigationController?.pushViewController(menuVC, animated: true)
}
}

//MenuVC.swift

class MenuVC: UITableViewController {
var currentMenu: Menu?
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
title = currentMenu?.title
}

// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return (currentMenu?.subMenus?.count ?? 0)
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier") ?? UITableViewCell(style: .default, reuseIdentifier: "reuseIdentifier")
if currentMenu?.subMenus?[indexPath.row].subMenus?.isEmpty ?? true {
cell.accessoryType = .none
} else {
cell.accessoryType = .disclosureIndicator
}
cell.textLabel?.text = currentMenu?.subMenus?[indexPath.row].title
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if !(currentMenu?.subMenus?[indexPath.row].subMenus?.isEmpty ?? true) {
let menuVC = MenuVC()
menuVC.currentMenu = currentMenu?.subMenus?[indexPath.row]
self.navigationController?.pushViewController(menuVC, animated: true)
}
}
}

关于arrays - 如何使用具有多个子类别的 TableView Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56786730/

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