我在工具栏中创建了按钮并为其设置了标记。我在本地声明了那个按钮。现在在其他一些功能中我想根据条件禁用按钮。
有没有办法在不全局声明按钮的情况下根据标签禁用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
}
}
答案 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
}