如何根据swift中的标签禁用UIBarButtonItem?

时间:2015-10-16 11:41:51

标签: ios swift uibarbuttonitem

我在工具栏中创建了按钮并为其设置了标记。我在本地声明了那个按钮。现在在其他一些功能中我想根据条件禁用按钮。

有没有办法在不全局声明按钮的情况下根据标签禁用UIBarButton。

****************************************************
     func setToolBar()
        {
            let toolbar : UIToolbar = UIToolbar()
            toolbar.sizeToFit()

            let prevButton = UIBarButtonItem(title: "<", style: .Plain, target: self, action:"goBack:")
            prevButton.tag = 20

           let nextButton = UIBarButtonItem(title: ">", style: .Plain, target: self, action:"goNext:")
            nextButton.tag = 30

            let flexButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil)

            let doneButton = UIBarButtonItem(title: "Done", style: .Plain, target: self, action:"done:")

            let arrItems : NSArray = [prevButton , nextButton,flexButton, doneButton]
            [toolbar.setItems(arrItems as? [UIBarButtonItem], animated: true)]
            city.inputAccessoryView = toolbar
            birthdate.inputAccessoryView = toolbar
        }

****************************************************

 func goBack(sender: UIBarButtonItem)
    {
        let prevTag : NSInteger = CurrentTextFiled.tag - 1

        let nextResponder = CurrentTextFiled.superview?.viewWithTag(prevTag)

        if((nextResponder) != nil)
        {
            nextResponder!.becomeFirstResponder()
        }
        else
        {
           //Disable UIBarButton here with tag 20
        }
    }

****************************************************

    func goNext(sender: UIBarButtonItem)
    {
        let prevTag : NSInteger = CurrentTextFiled.tag + 1
        let nextResponder = CurrentTextFiled.superview?.viewWithTag(prevTag)

        if((nextResponder) != nil)
        {
            nextResponder!.becomeFirstResponder()
        }
        else
        {
           //Disable UIBarButton here with tag 30
        }
    }

4 个答案:

答案 0 :(得分:2)

您可以查看使用标记。

    if let button = self.view.viewWithTag(YOUR_TAG_HERE) as? UIBarButtonItem {
        button.enabled = false
    }

答案 1 :(得分:2)

我把它提炼成一个可以在游乐场内运行的代码片段,并在Xcode中验证了这一点。

实质上,您希望为工具栏指定标签并使用viewWithTag()查找它。获得工具栏后,遍历其items数组并过滤掉您想要操作的按钮。不要忘记将工具栏作为子视图添加到viewController的视图中。

{{1}}

我希望这有用!

答案 2 :(得分:1)

UIView的实例有一种基于标记查找子视图的方法:

func viewWithTag(_ tag: Int) -> UIView?

我非常确定这会深入搜索,因此,只要您可以访问层次结构顶部附近的视图,这应该适合您。

答案 3 :(得分:0)

如果有人还需要这个: 如果您将拥有 navigationController,那么您可以像这样访问您的 UIBarButtonItem

    if let barButtonItem = navigationItem.rightBarButtonItems?.first(where: {$0.tag == <YOUR_TAG> }) {
        // Do staff here
    }

如果 toolBar 的情况类似:

     if let barButtonItem = toolBar.items?.first(where: {$0.tag == <YOUR_TAG>}) {
        // Do staff here
     }