Я создал боковое меню программно с двумя разделами (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:) функция не применяется к табличному представлению внутри моего контейнера !?
Извините за длинный вопрос, но я не могу найти рабочее решение. Заранее спасибо!