ios - 如何访问容器中各部分的行?
问题描述
我以编程方式创建了一个包含两个部分(4 + 2 行)的侧边菜单。我的主要控制器是一个UIViewController
. 为了在我的视图控制器中创建一个包含不同部分的分组表视图,我必须在其中放置一个容器视图,并将表视图嵌入到我的其他 VC 中。
为了访问我在不同部分的行,我首先创建了一个枚举:
enum MenuType: Int, CaseIterable {
case a, b, c, d
case e, f
var section: Int {
switch self {
case .a, .b, .c, .d : return 0
case .e, .f: return 1
}
}
var row: Int? {
switch self.section {
case 0: return self.rawValue
case 1: return self.rawValue - MenuType.allCases.filter{ $0.section < self.section }.count
default: return nil
}
}
}
在我的MainVC中调用MenuTypes
var didTapMenuType: ((MenuType) -> Void)?
要选择具有相应行的正确部分,我尝试了以下操作:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let menuType = MenuType.allCases.first(where: { $0.section == indexPath.section && $0.row == indexPath.row }) else {return}
dismiss(animated: true) { [weak self] in
self?.didTapMenuType?(menuType)
}
}
在我的MainVC中,我做了一个Switch-Case来将操作应用于不同的情况:
func transition(_ menuType: MenuType)
switch menuType {
case .a:
// action
case .b:
...
最后在用户点击侧面菜单按钮时调用它:
//button action ...
menuViewController.didTapMenuType = { menuType in
self.transitionToNew(menuType)
过渡效果很好。But when selecting a row nothing happens. 当我的主控制器是UITableViewController时,它起作用了。我唯一改变的是将我的表格视图嵌入到我的UIViewController的容器中,以获得对布局的更多控制(在表格视图控制器内部布局视图令人沮丧)。
谁能告诉我我错过了什么?我想问题是我的tableView(disSelectRowAt:)函数不适用于容器内的表格视图!?
很抱歉这个问题很长,但我想不出一个可行的解决方案。提前致谢!
解决方案
看起来您还没有在 Interface Builder 或代码中将您的tableView
委托连接到您的代理,例如:viewController
viewDidLoad
myTableView.delegate = self
编辑:不要忘记让您的视图控制器符合UITableViewDelegate
class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { ... }
推荐阅读
- django - 如何在 django 中为用户登录实现自定义身份验证
- react-native - this.nameOfFunction 调用时不是函数
- python - 如何在将列表与另一个变量进行比较时引用列表中的多个项目?
- cube - 是否可以在 TM1s.cfg 的 DataBaseDirectory 参数中使用相对路径?
- progressive-web-apps - 第二次刷新后正在存储缓存
- kubernetes - Kubernetes PVC 删除 POD 的内容
- apache-flink - 失去检查点协调员后是否有可能恢复
- java - 不同类方法的组成
- reactjs - 在 goDaddy 主机上上传由 create-react-app 创建的 react 应用程序的步骤
- ruby-on-rails - 具有树节点属性的 Rails 树模型