我在IB中创建了一个带有几个按钮的工具栏。我想能够隐藏/显示一个按钮取决于数据的状态在主窗口。

UIBarButtonItem没有隐藏属性,到目前为止我发现的任何隐藏它们的例子都涉及将导航栏按钮设置为nil,我不认为我想在这里做,因为我可能需要再次显示按钮(更不用说,如果我连接我的按钮到IBOutlet,如果我设置为nil,我不确定我如何得到它)。


当前回答

我知道这个回答有点晚了。然而,如果其他人面临类似的情况,这可能会有所帮助。

在iOS 7中,要隐藏栏按钮项,我们可以使用以下两种技术:-

使用SetTitleTextAttributes:-这是伟大的酒吧按钮项目,如“完成”,“保存”等。然而,它不工作的项目,如添加,垃圾符号等(至少不是为我),因为他们不是文本。 使用TintColor:-如果我有一个栏按钮项目称为“deleteButton”:-

为了隐藏按钮,我使用以下代码:-

[self.deleteButton setEnabled:NO]; 
[self.deleteButton setTintColor: [UIColor clearColor]];

要再次显示按钮,我使用以下代码

[self.deleteButton setEnabled:YES];
[self.deleteButton setTintColor:nil];

其他回答

对于Swift版本,下面是代码:

UINavigationBar:

self.navigationItem.rightBarButtonItem = nil

self.navigationItem.leftBarButtonItem = nil

补充Eli Burke的回应,如果你的uibarbuttonitem有一个背景图像而不是一个标题,你可以使用代码:

-(void)toggleLogoutButton:(bool)show{
    if (show) {
        self.tabButton.style = UIBarButtonItemStyleBordered;
        self.tabButton.enabled = true;
        UIImage* imageMap = [UIImage imageNamed:@"btn_img.png"];
        [((UIButton *)[self.tabButton customView]) setBackgroundImage:imageMap forState:UIControlStateNormal];
    } else {
        self.tabButton.style = UIBarButtonItemStylePlain;
        self.tabButton.enabled = false;
        [((UIButton *)[self.tabButton customView]) setBackgroundImage:nil forState:UIControlStateNormal];
    }
}

没有办法“隐藏”一个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):;

这是一个扩展,将处理这一点。

extension UIBarButtonItem {

    var isHidden: Bool {
        get {
            return tintColor == .clear
        }
        set {
            tintColor = newValue ? .clear : .white //or whatever color you want
            isEnabled = !newValue
            isAccessibilityElement = !newValue
        }
    }

}

用法:

myBarButtonItem.isHidden = true