Метод делегата UITabBar не вызывается (программно созданный интерфейс) - PullRequest
0 голосов
/ 20 марта 2020

Я немного новичок в разработке iOS приложений, я создаю приложение, но я не использую раскадровки.

Я хочу использовать UITabBar, но когда я нажимаю ( или нажмите) любой элемент панели, метод делегата didSelect не вызывается.

Я не знаю, что я делаю неправильно, это мой код:

class MainMenuVC: BaseVC, UITabBarDelegate {

  var tabBarMenu : UITabBar?

  override func viewDidLoad() {
      super.viewDidLoad()

      self.tabBarMenu = UITabBar.init()
      self.tabBarMenu?.delegate = self;

      tabBarMenu!.items = barItems // I omitted the code to populate this array on purpose

      // Tab Style
      tabBarMenu!.backgroundColor = Constants.Colors.gray
      tabBarMenu!.tintColor = Constants.Colors.gray
      tabBarMenu!.barTintColor = Constants.Colors.gray
      tabBarMenu!.isTranslucent = false
      tabBarMenu!.isUserInteractionEnabled = true

      //Tab bar position
      tabBarMenu!.frame = CGRect(x: contentView.frame.origin.x, y: contentView.frame.size.height - Constants.Dimensions.tabBarHeight, width: contentView.frame.size.width, height: Constants.Dimensions.tabBarHeight)

      // Adding
      self.view.addSubview(tabBarMenu!)
      self.view.bringSubviewToFront(tabBarMenu!)
  }

  // This is not being called
  func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
      self.handleTabBarTab(tag: item.tag)
  }
}

Мой BaseVC обычный UIViewController, я не использую UITabBarViewController

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Код, который я разместил здесь, немного отличается от кода, над которым я на самом деле работаю.

Что действительно вызывало проблемы, так это некоторые супер UIView s, где я добавлял все другие виды, включая UITabBar. Эти представления не были включены для взаимодействия с пользователем.

Поэтому все, что я делал, было:

// Enabled the main view container to user interaction
// This was actually causing the issue
self.containerView.isUserInteractionEnabled = true

// Adding the views
self.containerView.addSubview(tabBarMenu!)
self.containerView.bringSubviewToFront(tabBarMenu!)

После этого все работало хорошо. Так что этот подход на самом деле является функциональным

0 голосов
/ 20 марта 2020

Убедитесь, что у вас есть TAG для UITabBarItem, у меня это прекрасно работает:

    self.tabBarMenu = UITabBar(frame: CGRect(x: contentView.frame.origin.x, y: contentView.frame.size.height - Constants.Dimensions.tabBarHeight, width: contentView.frame.size.width, height: Constants.Dimensions.tabBarHeight))
    self.tabBarMenu?.delegate = self

    let tabOneBarItem = UITabBarItem(title: "Test", image: nil, tag: 1)
    let tabTwoBarItem = UITabBarItem(title: "Test2", image: nil, tag: 2)

    tabBarMenu!.items = [tabOneBarItem, tabTwoBarItem]
...