UITabBar禁用/启用UIButton上的项目

时间:2017-11-09 13:26:06

标签: ios swift uitabbarcontroller uitabbar

我有一个UITabBar,它有自己的UITabBarController,在这个控制器中我正在对tabBar进行一些调整,例如禁用/启用tabBar项目。我是在viewDidLoad中做的。

然而,这些调整的触发器将位于其中一个相关选项卡上,并且是视图控制器。触发器将是一个按钮,一旦按下按钮,tabBar上的一个项目应从“禁用”变为“启用”。

我是否需要使用tabBar重载功能,或者我需要以某种方式重新加载UITabBarController来实现这一点?

谢谢 - 感谢您提供的任何帮助!

编辑:UITabBarController和UIViewController的我的VC位于下方。

的UITabBarController

class TabBarVC: UITabBarController, TopRatedVCDelegate {


var tabBarItem1 = UITabBarItem()
var tabBarItem2 = UITabBarItem()
var tabBarItem3 = UITabBarItem()
var tabBarItem4 = UITabBarItem()

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

func setbar() {

    let tabBarControllerItems = tabBar.items

    if let tabArray = tabBarControllerItems {
        tabBarItem1 = tabArray[0]
        tabBarItem2 = tabArray[1]
        tabBarItem3 = tabArray[2]
        tabBarItem4 = tabArray[3]
    }
        tabBarItem1.isEnabled = true
        tabBarItem1.badgeValue = "99"
        tabBarItem2.isEnabled = false
        tabBarItem3.isEnabled = true
        tabBarItem4.isEnabled = true
}
}

带按钮的UIViewController

protocol TopRatedVCDelegate: class {
    func setbar()
}

class TopRatedVC: UIViewController {

@IBOutlet weak var userDefValueLbl: UILabel!

weak var delegate: TopRatedVCDelegate?

override func viewDidLoad() {
    super.viewDidLoad()

}


@IBAction func btnPressed(_ sender: Any) {
    delegate?.setbar()
}
}

1 个答案:

答案 0 :(得分:0)

让我向你解释代表团模式。它是控制器和视图等组件之间通信的有效方式。 您需要遵循以下6个步骤:

  1. 您需要添加符合要求的协议。对于您的情况,您可以添加一个名为updateTabItems的函数来启用或禁用标签栏项目。
  2. 您需要添加一个委托属性,其中包含您刚才创建的协议类型:weak var delegate: ProtocolType?
  3. 调用您的委托属性的功能,如下所示:delegate?.updateTabItems()
  4. 在您的第二个控制器,视图或组件上,它需要符合您的协议class Controller : YourProtocol
  5. 然后,您必须将委托属性设置为self
  6. 最后实施方法updateTabItems
  7. 以下是委托模式的完整说明。 IOS开发人员在日常工作中非常重要且非常有用:Delegation pattern