我在IB中创建了一个带有几个按钮的工具栏。我想能够隐藏/显示一个按钮取决于数据的状态在主窗口。
UIBarButtonItem没有隐藏属性,到目前为止我发现的任何隐藏它们的例子都涉及将导航栏按钮设置为nil,我不认为我想在这里做,因为我可能需要再次显示按钮(更不用说,如果我连接我的按钮到IBOutlet,如果我设置为nil,我不确定我如何得到它)。
我在IB中创建了一个带有几个按钮的工具栏。我想能够隐藏/显示一个按钮取决于数据的状态在主窗口。
UIBarButtonItem没有隐藏属性,到目前为止我发现的任何隐藏它们的例子都涉及将导航栏按钮设置为nil,我不认为我想在这里做,因为我可能需要再次显示按钮(更不用说,如果我连接我的按钮到IBOutlet,如果我设置为nil,我不确定我如何得到它)。
当前回答
@IBDesignable class AttributedBarButtonItem: UIBarButtonItem {
var isHidden: Bool = false {
didSet {
isEnabled = !isHidden
tintColor = isHidden ? UIColor.clear : UIColor.black
}
}
}
现在只需改变isHidden属性。
其他回答
来自@lnafziger的回答
将你的Barbuttons保存在一个强大的outlet中,并这样隐藏/显示它:
-(void) hideBarButtonItem :(UIBarButtonItem *)myButton {
// Get the reference to the current toolbar buttons
NSMutableArray *navBarBtns = [self.navigationItem.rightBarButtonItems mutableCopy];
// This is how you remove the button from the toolbar and animate it
[navBarBtns removeObject:myButton];
[self.navigationItem setRightBarButtonItems:navBarBtns animated:YES];
}
-(void) showBarButtonItem :(UIBarButtonItem *)myButton {
// Get the reference to the current toolbar buttons
NSMutableArray *navBarBtns = [self.navigationItem.rightBarButtonItems mutableCopy];
// This is how you add the button to the toolbar and animate it
if (![navBarBtns containsObject:myButton]) {
[navBarBtns addObject:myButton];
[self.navigationItem setRightBarButtonItems:navBarBtns animated:YES];
}
}
当需要使用以下功能..
[self showBarButtonItem:self.rightBarBtn1];
[self hideBarButtonItem:self.rightBarBtn1];
没有办法“隐藏”一个UIBarButtonItem,你必须从superView中删除它,当你想再次显示它时再添加它。
我目前正在运行OS X Yosemite开发者预览7和Xcode 6 beta 6,目标是iOS 7.1,以下解决方案对我来说很好:
为uinavigationitem和UIBarButtonItems创建outlet 运行以下代码删除 (自我。navItem setRightBarButtonItem: nil); (自我。navItem setLeftBarButtonItem: nil); 运行以下代码再次添加按钮 (自我。navItem setRightBarButtonItem deleteItem):; (自我。navItem setLeftBarButtonItem addItem):;
最后,在iOS 16+中,UIBarButtonItem有isHidden属性。
所以,扩展现有的答案,比如
extension UIBarButtonItem {
func show() {
if #available(iOS 16.0, *) {
isHidden = false
} else {
isEnabled = true
tintColor = .white
}
}
func hide() {
if #available(iOS 16.0, *) {
isHidden = true
} else {
isEnabled = false
tintColor = .clear
}
}
}
为了隐藏许多项目之一,我使用以下代码:
self.navigationItem.leftBarButtonItems?.remove(at: 0)
self.navigationItem.rightBarButtonItems?.remove(at: 1)
我想如果需要的话可以重新添加。