隐藏UIToolbar的UIBarButtonItems

14
我有一个使用IB设置了三个按钮(左、中、右)的UIToolbar。在某些情况下,我希望不显示中间的按钮。是否有方法可以隐藏UIToolBar中特定的按钮?没有隐藏属性,我只能找到setEnable,但这仍然会留下按钮,让用户想知道它的作用是什么。我希望只在实际有用的情况下显示它。
提前感谢!
6个回答

28

重置工具栏项目

-(void)setItems:(NSArray *)items animated:(BOOL)animated
您可以使用items属性获取当前项目,然后只需删除您不想显示的项目并传入新的NSArray即可。 此外,您还可以对其进行动画处理以使用户更加明确地了解情况。

啊,是的,这个可以。一开始我以为不行,但它确实可以。谢谢! - jmurphy
1
@JayQ,这并不是隐藏按钮:它是将其移除。要隐藏按钮,您需要通过valueForKey:@"_view"访问其视图,这可能是可以的,也可能不可以。就我个人而言,我认为这样做没问题。 - Dan Rosenstark

12

我添加了一个UIBarButtonItem的IBOutlet,而不是猜测索引,然后通过名称将其删除:

NSMutableArray *toolBarButtons = [self._toolbar.items mutableCopy];
[toolBarButtons removeObject:self._selectButton]; // right button
[self._toolbar setItems:toolBarButtons];

当然,将插座连接到设计师中也有帮助 :)


Nico写的非常简洁,即使对于属性的非正统命名方式也是如此。通常"_"与自动生成的变量相关联,而不是属性本身。 ;) - drew..

6
这是我的做法。虽然很麻烦,但这是我能想到的最好方法:
NSArray *toolBarArray = toolBar.items;
NSMutableArray *newToolBarArray = [NSMutableArray arrayWithArray:toolBarArray];
[newToolBarArray removeObjectAtIndex:2];
[newToolBarArray removeObjectAtIndex:1];
//remove whatever buttons you want to.

NSArray *finalTabBarArray =[[NSArray alloc] initWithObjects:newToolBarArray, nil];
[toolBar setItems:[finalTabBarArray objectAtIndex:0] animated:NO];

2

我知道这个帖子已经有点老了,但是对于那些在寻找解决方案的人,这里提供一个方法:

在iOS7中,您可以使用以下方法来显示/隐藏工具栏按钮:

    if(// your code Condition) 
{ self.toolbarBtn1.enabled = YES;
 self.toolbarBtn1.tintColor = nil; }
 else
 { self.toolbarBtn1.enabled = NO; 
self.toolbarBtn1.tintColor = [UIColor clearColor]; }


我无法让它工作。我的工具栏是黑色的,但我仍然可以看到按钮(在iOS 10上测试过)。 - John Pang

1

这里不起作用,因为您使用setItem发送的数组与函数所期望的不同。

我不得不替换这行:

NSArray *finalTabBarArray = [[NSArray alloc] initWithObjects:newToolBarArray, nil];

用这个:

NSArray *finalTabBarArray = [newToolBarArray copy];

那么它就完美地运作了。


1
Mohit的回答是我曾经使用过的,但你不需要特别将其设置为工具栏设置的NSArray。你可以将项目数组设置为NSMutableArray。我不知道有什么真正的优势,但这样可以减少几行代码。这样,您可以像处理其他对象数组一样移动UIButton对象,并使用该可变数组重新设置工具栏。
[newToolBarArray removeObjectAtIndex:2];
[newToolBarArray removeObjectAtIndex:1];
[toolBar setItems:newToolBarArray];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接