ios - 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://www.raywenderlich.com/173753/uisplitviewcontroller-tutorial-getting-started-2
我还阅读了 Apple 关于 View Controllers、Navigation Controllers、Delegation 等的文档
我认为我正在努力解决的是如何正确设置代表。一个例子和解释将不胜感激。提前致谢。
解决方案
推荐阅读
- laravel - Laravel 查询生成器即使正确绑定也无法正确运行查询
- javascript - 当 ajax 调用在 axios 中成功时做一些事情 - 在 axios 中链接 then()
- android - Mailto links are not working for RTL(arabic) in Android
- .net-core - 如何将 cookie 值转换为 Ocelot 中的标头值
- scala - Scala, SBT, 选择低版本
- uitableview - UITableViewAutomaticDimension 不适用于具有特征变化的 Xcode 11 和 iOS 13
- regex - 正则表达式提取英国货币,包括英镑符号和便士 (p)
- windows - Windows 用上述内容批量替换空单元格
- javascript - 如何获取PDF文件的页数?
- google-data-studio - 我正在尝试在 Google Data Studio 中绘制以下数据,但我无法