2017-07-26 110 views
0

我已经创建了一个带有5个标签的标签栏。我们想要创建一个功能,我们可以以编程方式启用/禁用一些标签栏的选项卡,以便用户无法点击它。Swift 3标签栏禁用标签

我们使用了默认的标签栏控制器,我们使用的是swift 3.任何人都知道如何管理这些东西?

我已经尝试了很多方法,但似乎它不可能限制用户点击选项卡。

如果有人遇到并解决了这个问题,请让我知道。

+0

你有没有尝试tabbarItem上的isEnabled属性? –

+0

tabBarItem.isEnabled = false会起作用! – luckyShubhra

+0

@SivajeeBattina是的,我已经尝试过,但没有工作。 – iDev

回答

2
let tabBarControllerItems = self.tabBarController?.tabBar.items 

if let tabArray = tabBarControllerItems { 
    tabBarItem1 = tabArray[0] 
    tabBarItem2 = tabArray[1] 

    tabBarItem1.isEnabled = false 
    tabBarItem2.isEnabled = false  
} 

只要把代码块中对于初学者的viewDidLoad中()方法上面,不要忘记创造tabBarItem变量

+0

我已经尝试过但不工作..! – iDev

+0

是的。 @ AmK-IOSDev试试这个解决方案。它的工作.... –

+0

试试这个 让tabBar3:UITabBarItem = UITabBarItem(标题:“标题”,图像:零,标记:2) tabBar3.isEnabled = false –

0

只需创建一个customTabBarController类,并把娄代码上viewDidLoad中() 。

if let arrayOfTabBarItems = self.tabBar.items as AnyObject as? NSArray,let tabBarItem = arrayOfTabBarItems[3] as? UITabBarItem { 
     tabBarItem.isEnabled = false 
    } 

因此您可以根据您的需求更改arrayOfTabBarItems索引。

1

斯威夫特3的Xcode 8.3.3

我想提出一个演示应用程序对于您的问题。这是TabBar ViewController中firstViewController的代码。

class firstViewController: UIViewController ,UITabBarControllerDelegate { 

override func viewDidLoad() { 
super.viewDidLoad() 

self.tabBarController?.delegate = self 
} 


func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 
    if viewController.isKind(of: secondViewController.self as AnyClass) { 
     return true 
    } 
    if viewController.isKind(of: thirdViewController.self as AnyClass) { 
     return false 
    } 
    } 
} 

在那个Demo SecondViewController是单击并打开ViewController。但是thirdViewController没有被点击。

1

viewWillAppear()方法试试这个:

if let arrayOfTabBarItems = tabBarViewController.tabBar.items as! AnyObject as? NSArray,tabBarItem = arrayOfTabBarItems[2] as? UITabBarItem { 
     tabBarItem.enabled = false 
    } 

注意:将上面的代码从点击禁用第三个选项卡,禁用任何其他只是改变指数在arrayOfTabBarItems