如何在容器中访问分段的行?

问题描述 投票:1回答:1

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

对不起,问题太长了,但我想不出一个有效的解决方案。

ios swift containers tableview
1个回答
1
投票

看起来你还没有连接你的 tableView 委托 viewController 无论是在Interface Builder中,还是在代码中,在你的 viewDidLoad 比如说。

myTableView.delegate = self

EDIT: 不要忘了让你的视图控制器符合以下条件 UITableViewDelegate

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { ... } 
© www.soinside.com 2019 - 2024. All rights reserved.