我在IB中创建了一个带有几个按钮的工具栏。我想能够隐藏/显示一个按钮取决于数据的状态在主窗口。
UIBarButtonItem没有隐藏属性,到目前为止我发现的任何隐藏它们的例子都涉及将导航栏按钮设置为nil,我不认为我想在这里做,因为我可能需要再次显示按钮(更不用说,如果我连接我的按钮到IBOutlet,如果我设置为nil,我不确定我如何得到它)。
我在IB中创建了一个带有几个按钮的工具栏。我想能够隐藏/显示一个按钮取决于数据的状态在主窗口。
UIBarButtonItem没有隐藏属性,到目前为止我发现的任何隐藏它们的例子都涉及将导航栏按钮设置为nil,我不认为我想在这里做,因为我可能需要再次显示按钮(更不用说,如果我连接我的按钮到IBOutlet,如果我设置为nil,我不确定我如何得到它)。
当前回答
我将在这里添加我的解决方案,因为我还没有在这里找到它。我有一个动态按钮,其图像取决于一个控件的状态。对我来说,最简单的解决方案是,如果控件不存在,将图像设置为nil。每次控件更新时,图像都会更新,因此,这对我来说是最优的。为了确保我也设置了enabled为NO。
将宽度设置为最小值在iOS 7上不起作用。
其他回答
我知道这个回答有点晚了。然而,如果其他人面临类似的情况,这可能会有所帮助。
在iOS 7中,要隐藏栏按钮项,我们可以使用以下两种技术:-
使用SetTitleTextAttributes:-这是伟大的酒吧按钮项目,如“完成”,“保存”等。然而,它不工作的项目,如添加,垃圾符号等(至少不是为我),因为他们不是文本。 使用TintColor:-如果我有一个栏按钮项目称为“deleteButton”:-
为了隐藏按钮,我使用以下代码:-
[self.deleteButton setEnabled:NO];
[self.deleteButton setTintColor: [UIColor clearColor]];
要再次显示按钮,我使用以下代码
[self.deleteButton setEnabled:YES];
[self.deleteButton setTintColor:nil];
如果你使用的是Swift 3
if (ShowCondition){
self.navigationItem.rightBarButtonItem = self.addAsset_btn
}
else {
self.navigationItem.rightBarButtonItem = nil
}
一种方法是在分配UIBarButtonItem时使用initWithCustomView:(UIView *)属性。UIView的子类有hide/unhide属性。
例如:
1. 有一个你想隐藏/取消隐藏的UIButton。
2. 让uibuttas成为自定义视图。如:
UIButton*myButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];//your button
UIBarButtonItem*yourBarButton=[[UIBarButtonItem alloc] initWithCustomView:myButton];
3.你可以隐藏/取消隐藏你已经创建的myButton。(myButton setHidden:是的);
最后,在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
}
}
}
我的解是设定边界。宽度为0,你有什么UIBarButtonItem(我使用这种方法与UIButton和UISearchBar):
隐藏:
self.btnXXX.bounds = CGRectMake(0,0,0,0);
显示:
self.btnXXX.bounds = CGRectMake(0,0,40,30); // <-- put your sizes here