为什么UITableView没有得到任何用户交互,因为它的ViewController被添加到UITabBarController作为subView

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

我正在以编程方式将一个左侧菜单设置为UITabBarController。为此,我将一个带有0索引的viewController作为subView插入到TabBarController中。当我按下菜单图标时,第一个tabView向右移动并显示菜单UITableView但是我无法与UITableView进行交互我在哪里做错了?

UITabBarController.swift文件

import UIKit

class MainTabBarController: UITabBarController {

// MARK: Properties

var menuController: MenuController!
var centerController: UIViewController!
var isExpanded = false

// MARK: Initialization

override func viewDidLoad() {
    super.viewDidLoad()
    configureHomeController()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    return .slide
}

override var prefersStatusBarHidden: Bool {
    return isExpanded
}

// MARK: Handlers

func configureHomeController() {
    let navigationController = self.viewControllers![0] as! UINavigationController
    let homeController =  navigationController.viewControllers[0] as! FirstViewController
    homeController.homeControllerDelegate = self
    centerController = homeController
}

//Configuring Side Menu Controller

func configureMenuController() {
    if menuController == nil {
        // add menu controller here
        menuController = MenuController()
        menuController.homeControllerDelegate = self
        // Add Child View Controller
        addChild(menuController)
        // Add Child View as Subview
        view.insertSubview(menuController.view, at: 0)
        // Configure Child View
        menuController.view.frame = view.bounds
        menuController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        // Notify Child View Controller
        menuController.didMove(toParent: self)
    }
}

func animateSideMenuOpeningAndClosing(shouldExpand: Bool, menuItem: MenuItem?) {
    if shouldExpand {
        // Show Menu
        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: .curveEaseInOut, animations: {
            self.centerController.view.frame.origin.x = self.centerController.view.frame.width - 80
        }, completion: nil)
    } else {
        // Hide Menu
        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0,options: .curveEaseInOut, animations: {
            self.centerController.view.frame.origin.x = 0
        }) { (_) in
            guard let menuItem = menuItem else {return}
            self.didSelectMenuItem(menuItem: menuItem)
        }
    }
    animateStatusBar ()
}

func didSelectMenuItem(menuItem: MenuItem) {
    switch menuItem {
    case .Dashboard:
        print("Show Dashboard")
    case .Profile:
        print("Show Profile")
    case .Notifications:
        print("Show Notifications")
    case .Contacts:
        let controller = SettingsController()
        controller.username = "YAMIN"
        present(UINavigationController(rootViewController: controller), animated: true, completion: nil)
    }
}

func animateStatusBar () {
    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0,options: .curveEaseInOut, animations: {
        self.setNeedsStatusBarAppearanceUpdate()
    }, completion: nil)
}

}

extension MainTabBarController: HomeControllerDelegate {
func handleMenuToogle(forMenuItem menuItem: MenuItem?) {
    print("Pressed")
    if !isExpanded {
        configureMenuController()
    }
    isExpanded = !isExpanded
    animateSideMenuOpeningAndClosing(shouldExpand: isExpanded, menuItem: menuItem)
}

}
ios swift uitableview uiviewcontroller uitabbar
1个回答
1
投票

您将子视图插入0索引,因此,我认为有些视图在子视图层次结构中较高。

您可以使用“Debug View Hierarchy”按钮enter image description here查看子视图

© www.soinside.com 2019 - 2024. All rights reserved.