Swift 标签栏已隐藏但自定义按钮仍处于活动状态

Swift Tab bar hidden but custom button still active

我有一个自定义标签栏,我在中间添加了一个按钮:

class CustomTabBarController: UITabBarController {

 override func viewDidLoad() {
    super.viewDidLoad()

    setupMiddleButton()
}
func setupMiddleButton() {
    let numberOfItems = CGFloat(tabBar.items!.count)
    let tabBarItemSize = CGSize(width: tabBar.frame.width / numberOfItems, height: tabBar.frame.height)
    menuButton.frame = CGRect(x: 0, y: 0, width: tabBarItemSize.width, height: tabBar.frame.size.height)
    var menuButtonFrame = menuButton.frame
    menuButtonFrame.origin.y = self.view.bounds.height - menuButtonFrame.height - self.view.safeAreaInsets.bottom
    menuButtonFrame.origin.x = self.view.bounds.width/2 - menuButtonFrame.size.width/2
    menuButton.frame = menuButtonFrame
    menuButton.backgroundColor = UIColor.clear
    menuButton.addTarget(self, action: #selector(menuButtonAction), for: UIControlEvents.touchUpInside)
    self.view.addSubview(menuButton)
    self.view.layoutIfNeeded()
}
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    menuButton.frame.origin.y = self.view.bounds.height - menuButton.frame.height - self.view.safeAreaInsets.bottom
 }
}

此栏显示在多个控制器中。

但是我有一个特定的控制器,我希望隐藏标签栏。

 override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.tabBar.isHidden = true

}
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.tabBarController?.tabBar.isHidden = false
}

这段代码工作正常,实际上隐藏了栏。

但是,如果我在中间单击(添加 menuButton 的位置),则会调用按钮操作(执行 segue)。

隐藏标签栏时如何禁用按钮?

感谢您的帮助! --------------更新解决方案 我不确定这是最好的解决方案,因为我是 swift 的新手,但它似乎有效... 在我的 CustomTabBarController 中,我添加了功能:

func hideTabBar() {
    self.tabBar.isHidden = true
    self.menuButton.isHidden = true
}

func showTabBar() {
    self.tabBar.isHidden = false
    self.menuButton.isHidden = false
}

每当我需要 hide/display 时,我都会调用此函数。

在我想隐藏它的控制器中,我这样做了:

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    let tabBar = self.tabBarController as! FishBookTabBarController
    tabBar.hideTabBar()

}
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
     let tabBar = self.tabBarController as! FishBookTabBarController
    tabBar.showTabBar()
}

您正在将按钮添加到 self.view,因此它不是 "part of" 您的标签栏。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.tabBar.isHidden = true
    self.menuButton.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.tabBarController?.tabBar.isHidden = false
    self.menuButton.isHidden = false
}

应该做。