首页 > 解决方案 > 如何访问容器中各部分的行?

问题描述

我以编程方式创建了一个包含两个部分(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:)函数不适用于容器内的表格视图!?

很抱歉这个问题很长,但我想不出一个可行的解决方案。提前致谢!

标签: iosswiftcontainerstableview

解决方案


看起来您还没有在 Interface Builder 或代码中将您的tableView委托连接到您的代理,例如:viewControllerviewDidLoad

myTableView.delegate = self

编辑:不要忘记让您的视图控制器符合UITableViewDelegate

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { ... } 

推荐阅读