Как я могу получить доступ к строкам в разделах в моем контейнере? - PullRequest
2 голосов
/ 24 апреля 2020

Я создал боковое меню программно с двумя разделами (4 + 2 строки). Мой главный контроллер - UIViewController. Чтобы создать сгруппированное табличное представление с различными секциями в моем контроллере представления, я должен был поместить контейнерное представление внутри него и встроить его в другой V C с табличным представлением.

Для доступа к моему строки в разных разделах Я сначала создал 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
        }
    }
}

Чтобы вызвать Типы меню в моем MainV C

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)
        }
    }

И в моем MainV C я применил Switch-Case для применения Действия в разных случаях:

func transition(_ menuType: MenuType)
switch menuType {
        case .a:
            // action
        case .b:
         ...

И, наконец, вызовите его, когда пользователь нажимает на кнопку бокового меню:

//button action ...
 menuViewController.didTapMenuType = { menuType in
        self.transitionToNew(menuType)

Переход работает отлично. Но при выборе строки ничего не происходит. Это работало, когда моим главным контроллером был UITableViewController . Единственное, что я изменил, - это вставил мое табличное представление в контейнер моего UIViewController , чтобы получить больший контроль над макетом (это расстраивало представления макета внутри контроллера табличного представления).

Может кто-нибудь сказать мне, что мне не хватает? Я предполагаю, что проблема в том, что моя tableView (disSelectRowAt:) функция не применяется к табличному представлению внутри моего контейнера !?

Извините за длинный вопрос, но я не могу найти рабочее решение. Заранее спасибо!

1 Ответ

1 голос
/ 24 апреля 2020

Похоже, вы не подключили свой tableView делегат к вашему viewController ни в Интерфейсном Разработчике, ни в коде, в вас viewDidLoad, например:

myTableView.delegate = self

РЕДАКТИРОВАТЬ : Не забудьте настроить контроллер вида на соответствие UITableViewDelegate

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { ... } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...