首页 > 解决方案 > Swift-通过侧 TableView 控制的导航动态加载多个子视图控制器

问题描述

计算机科学专业的学生在这里尝试学习 Swift。我正在尝试为 iPad 创建一个非常简单的应用程序,它本质上是一个食物菜单。主页将只是餐厅表,选择餐厅会将用户带到餐厅的菜单。菜单页面左侧有一个表格视图,用于导航不同的食物类别,而右侧是单个食物项目的表格视图控制器。根据用户选择的类别,表格将刷新其数据以显示相应的食品。

编辑 2:本质上,它具有主从关系,就像在拆分视图控制器中一样。但是,我没有使用模板,因为根视图不会是拆分视图。我已经设法让主表和详细表加载第一页,但是当我在主表上选择不同的类别时,我无法刷新详细表。这是我的一些代码:

MenuViewController是我与主表视图的拆分视图。

protocol CategorySelectionDelegate: class {
    func categorySelected(_ newCategory: Int)
}

class MenuViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{

    weak var delegate: CategorySelectionDelegate?
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
    }

    //... set up master Table View values

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        delegate?.categorySelected(indexPath.row)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? ItemsTableViewController {
            destination.resto = resto
        }
    }
}

ItemsTableViewController是详细的表视图。

class ItemsTableViewController: UITableViewController {

    var resto: Restaurant!
    var categorySelected: Int = 0 {
        didSet {
            self.tableView.reloadData()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    //...set up detail Table View cells

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath)
        cell.textLabel?.text = resto.menuItems[categorySelected][indexPath.row].name
        return cell
    }
}

extension ItemsTableViewController: CategorySelectionDelegate {
    func categorySelected(_ newCategory: Int) {
        categorySelected = newCategory
    }
}

仅供参考: MyRestaurantClass 有一个数组cats: [String]用于食品类别和一个双数组menuItems[[MyFoodObject]]用于分成类别的食品

我已经在很多地方寻找答案,例如:

https://useyourloaf.com/blog/container-view-controllers/

https://digitalleaves.com/blog/2017/01/towards-better-split-view-controllers-i-our-custom-split-controller/

https://www.raywenderlich.com/173753/uisplitviewcontroller-tutorial-getting-started-2

https://makeapppie.com/2015/03/31/swift-swift-split-view-controllers-round-two-part-2-master-to-detail/

拆分视图控制器不作为根视图控制器

我还阅读了 Apple 关于 View Controllers、Navigation Controllers、Delegation 等的文档

我认为我正在努力解决的是如何正确设置代表。一个例子和解释将不胜感激。提前致谢。

标签: iosswiftdynamicxcode8uicontainerview

解决方案


推荐阅读