我以编程方式创建了一个有两个部分(4+2行)的侧菜单。UIViewController
. 为了在我的视图控制器中创建一个具有不同部分的分组表视图,我不得不在我的容器内放置一个容器视图,并在我的其他VC中嵌入表视图。
为了在不同的部分访问我的行,我首先创建了一个Enum。
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
}
}
}
要调用 菜单类型 在我 主VC
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)
}
}
而在我的... 主VC 我做了一个 开关盒 来对不同的情况进行操作。
func transition(_ menuType: MenuType)
switch menuType {
case .a:
// action
case .b:
...
最后在用户点击侧边菜单按钮时调用它。
//button action ...
menuViewController.didTapMenuType = { menuType in
self.transitionToNew(menuType)
过渡效果很好,但当选择一行时,什么都没有发生。但是当选择一行时,什么都没有发生。UITableViewController. 我唯一改变的是将我的表视图嵌入到我的容器中。UIViewController 以获得更多的布局控制权(在表视图控制器内布局视图是令人沮丧的)。
谁能告诉我,我缺少什么?我想问题是我的 tableView(disSelectRowAt:) 函数不适用于我容器内的表视图!?
对不起,问题太长了,但我想不出一个有效的解决方案。
看起来你还没有连接你的 tableView
委托 viewController
无论是在Interface Builder中,还是在代码中,在你的 viewDidLoad
比如说。
myTableView.delegate = self
EDIT: 不要忘了让你的视图控制器符合以下条件 UITableViewDelegate
class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { ... }