Sas*_*sha 247 uitoolbar uibarbuttonitem ios
我在IB中用几个按钮创建了一个工具栏.我希望能够隐藏/显示其中一个按钮,具体取决于主窗口中的数据状态.
UIBarButtonItem 没有隐藏的属性,我发现到目前为止隐藏它们的任何例子都涉及将导航栏按钮设置为nil,我认为我不想在这里做,因为我可能需要再次显示按钮(不是要提一下,如果我将我的按钮连接到IBOutlet,如果我将其设置为nil我不确定我是如何得到它的.
lna*_*ger 257
将您的按钮保存在一个强大的插座中(让我们称之为myButton)并执行此操作以添加/删除它:
// Get the reference to the current toolbar buttons
NSMutableArray *toolbarButtons = [self.toolbarItems mutableCopy];
// This is how you remove the button from the toolbar and animate it
[toolbarButtons removeObject:self.myButton];
[self setToolbarItems:toolbarButtons animated:YES];
// This is how you add the button to the toolbar and animate it
if (![toolbarButtons containsObject:self.myButton]) {
// The following line adds the object to the end of the array.
// If you want to add the button somewhere else, use the `insertObject:atIndex:`
// method instead of the `addObject` method.
[toolbarButtons addObject:self.myButton];
[self setToolbarItems:toolbarButtons animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
因为它存储在插座中,所以即使它不在工具栏上,也会保留对它的引用.
Max*_*Max 211
我知道这个问题的答案迟了.但是,如果其他人面临类似的情况,它可能会有所帮助.
在iOS 7中,要隐藏栏按钮项,我们可以使用以下两种技术: -
SetTitleTextAttributes: -这部作品栏按钮的项目,如"做"大,"保存"等.然而,它并不像添加项,回收站符号等(对我来说ATLEAST不)工作,因为他们不是文本.TintColor: - 如果我有一个名为"deleteButton"的栏按钮项: -为了隐藏按钮,我使用了以下代码: -
[self.deleteButton setEnabled:NO];
[self.deleteButton setTintColor: [UIColor clearColor]];
Run Code Online (Sandbox Code Playgroud)
为了再次显示该按钮,我使用了以下代码: -
[self.deleteButton setEnabled:YES];
[self.deleteButton setTintColor:nil];
Run Code Online (Sandbox Code Playgroud)
Dre*_*erg 68
这是一个简单的方法:
hide: barbuttonItem.width = 0.01;
show: barbuttonItem.width = 0; //(0 defaults to normal button width, which is the width of the text)
Run Code Online (Sandbox Code Playgroud)
我只是在我的视网膜iPad上运行它,而.01足够小,不会出现.
Eli*_*rke 60
可以在不改变宽度或将其从条形图中移除的情况下隐藏按钮.如果将样式设置为plain,删除标题,并禁用该按钮,它将消失.要恢复它,只需撤消更改即可.
-(void)toggleBarButton:(bool)show
{
if (show) {
btn.style = UIBarButtonItemStyleBordered;
btn.enabled = true;
btn.title = @"MyTitle";
} else {
btn.style = UIBarButtonItemStylePlain;
btn.enabled = false;
btn.title = nil;
}
}
Run Code Online (Sandbox Code Playgroud)
vis*_*kar 42
下面是我的解决方案,虽然我正在寻找导航栏.
navBar.topItem.rightBarButtonItem = nil;
Run Code Online (Sandbox Code Playgroud)
这里"navBar"是XIB视图中NavigationBar的IBOutlet.这里我想隐藏按钮或根据某些条件显示它.所以我在"If"中测试条件,如果是,我在目标视图的viewDidLoad方法中将按钮设置为nil.
这可能与您的问题无关,但如果您想隐藏NavigationBar上的按钮,则会出现类似情况
pab*_*ros 26
对于Swift 3和Swift 4,你可以这样做来隐藏UIBarButtomItem:
self.deleteButton.isEnabled = false
self.deleteButton.tintColor = UIColor.clear
Run Code Online (Sandbox Code Playgroud)
并显示UIBarButtonItem:
self.deleteButton.isEnabled = true
self.deleteButton.tintColor = UIColor.blue
Run Code Online (Sandbox Code Playgroud)
在tintColor您必须指定您用于的原点颜色UIBarButtomItem
Olc*_*taş 22
我目前正在运行针对iOS 7.1的OS X Yosemite Developer Preview 7和Xcode 6 beta 6,以下解决方案对我来说很好:
UINavigationItem和UIBarButtonItem小号运行以下代码以删除
[self.navItem setRightBarButtonItem:nil];
[self.navItem setLeftBarButtonItem:nil];
Run Code Online (Sandbox Code Playgroud)运行以下代码以再次添加按钮
[self.navItem setRightBarButtonItem:deleteItem];
[self.navItem setLeftBarButtonItem:addItem];
Run Code Online (Sandbox Code Playgroud)Den*_*Den 14
我在我的项目中使用了IBOutlets.所以我的解决方案是:
@IBOutlet weak var addBarButton: UIBarButtonItem!
addBarButton.enabled = false
addBarButton.tintColor = UIColor.clearColor()
Run Code Online (Sandbox Code Playgroud)
当您需要再次显示此栏时,只需设置反转属性即可.
在斯威夫特3,而不是enable使用isEnable属性.
小智 12
iOS 8.带自定义图像的UIBarButtonItem.尝试了许多不同的方式,其中大多数没有帮助.Max的解决方案,setTintColor没有变成任何颜色.我自己想出了这个,认为它对某个人有用.
隐藏:
[self.navigationItem.rightBarButtonItem setEnabled:NO];
[self.navigationItem.rightBarButtonItem setImage:nil];
Run Code Online (Sandbox Code Playgroud)
用于显示:
[self.navigationItem.rightBarButtonItem setEnabled:YES];
[self.navigationItem.rightBarButtonItem setImage:image];
Run Code Online (Sandbox Code Playgroud)
试试Swift,不要更新tintColor你的UIBarButtonItem的设计,如AppDelegate中的字体大小,它会在你出现时完全改变按钮的外观.
如果是文本按钮,更改标题可以让您的按钮"消失".
if WANT_TO_SHOW {
myBarButtonItem.enabled = true
myBarButtonItem.title = "BUTTON_NAME"
}else{
myBarButtonItem.enabled = false
myBarButtonItem.title = ""
}
Run Code Online (Sandbox Code Playgroud)
@IBDesignable class AttributedBarButtonItem: UIBarButtonItem {
var isHidden: Bool = false {
didSet {
isEnabled = !isHidden
tintColor = isHidden ? UIColor.clear : UIColor.black
}
}
}
Run Code Online (Sandbox Code Playgroud)
而现在只需改变isHidden财产.
我发现了另一种皱纹tintColor和isEnabled办法由Max和其他建议-当VoiceOver会为辅助功能启用,并且按钮逻辑隐藏,无障碍光标仍然将重点放在栏按钮,并指出它是"灰色"(即,因为isEnabled是设为false).接受的答案中的方法不会受到这种副作用的影响,但我发现的另一项工作是isAccessibilityElement在"隐藏"按钮时设置为false:
deleteButton.tintColor = UIColor.clear
deleteButton.isEnabled = false
deleteButton.isAccessibilityElement = false
Run Code Online (Sandbox Code Playgroud)
然后isAccessibilityElement在"显示"按钮时返回true:
deleteButton.tintColor = UIColor.blue
deleteButton.isEnabled = true
deleteButton.isAccessibilityElement = true
Run Code Online (Sandbox Code Playgroud)
由于我们隐藏/显示最左侧的条形按钮项目,因此条形按钮项目仍占用空间不是问题.
从@lnafziger回答改进
将您的Barbutton保存在一个强大的插座中并执行此操作以隐藏/显示它:
-(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];
}
}
Run Code Online (Sandbox Code Playgroud)
需要时使用以下功能..
[self showBarButtonItem:self.rightBarBtn1];
[self hideBarButtonItem:self.rightBarBtn1];
Run Code Online (Sandbox Code Playgroud)
这是一个可以处理此问题的扩展程序。
extension UIBarButtonItem {
var isHidden: Bool {
get {
return tintColor == .clear
}
set {
tintColor = newValue ? .clear : .white //or whatever color you want
isEnabled = !newValue
isAccessibilityElement = !newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
myBarButtonItem.isHidden = true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
144025 次 |
| 最近记录: |