我想根据某个条件动态隐藏我的一个视图中的按钮.
我尝试在视图控制器的-viewWillAppear
方法中添加一些代码,在显示实际视图之前隐藏按钮,但我仍然不知道如何做到这一点.
我通过IBOutlet引用了按钮,但我不确定如何从这里向前推进.作为参考,这是一个UIBarButtonItem实例.
如果您试图隐藏UIBarButtonItem,您实际上必须修改父栏的内容.如果是UIToolBar,则需要将bar的items数组设置为不包含项目的数组.
NSMutableArray *items = [[myToolbar.items mutableCopy] autorelease]; [items removeObject: myButton]; myToolbar.items = items;
将条形项设置为nil.
例如:
self.navigationItem.leftBarButtonItem = nil;
所以我尝试了Ben的胜利方法,但最后我发现它对我的目的是错误的 - 尽管我确定这取决于你想要做什么.我试图仅在某些条件下显示导航栏按钮,然后在条件不再满足时立即隐藏它(在我的情况下,它是用于隐藏与UITextView关联的键盘的"完成"按钮.它应该只是当用户在文本视图中键入时显示).我的步骤如下:
我在UIViewController类中添加了一个UIBarButtonItem作为属性.我在initWithNibName方法中实例化它.
一旦用户开始在文本视图中键入,我就在导航栏中将UIBarButtonItem属性指定为rightBarButtonItem.
当用户完成输入时,我将UIBarButtonItem属性设置为nil.
它的工作就像一个魅力.我在下面添加一些代码示例.
首先在我的视图控制器init方法中实例化按钮:
barButtonItemDone = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
然后我将其设置为委托方法中的右侧栏按钮,一旦用户开始编辑文本视图,就会调用该按钮:
self.navigationItem.rightBarButtonItem=[self barButtonItemDone];
最后,当单击按钮本身时,会调用一个名为"done"的方法,我只是在该方法中将rightBarButtonItem设置为nil:
self.navigationItem.rightBarButtonItem=nil;
如果所有人都试图隐藏的是导航栏中的后退按钮,则有一种更简单的方法:
self.navigationItem.hidesBackButton = YES;
从开发者文档引用:
hidesBackButton
一个布尔值,用于确定是否隐藏了后退按钮.
@property(nonatomic,assign)BOOL hidesBackButton
讨论
如果此导航项是最高项时隐藏了后退按钮,则为YES; 否则,不.默认值为NO.
可用性
适用于iPhone OS 2.0及更高版本.
这有点像黑客,但它适用于我的情况(它正确处理动态间距):
隐藏:
myButton.width = 0.1;
显示:
myButton.width = 0.0;
宽度为0.0是"自动宽度",宽度为0.1时,按钮完全消失(甚至不是按钮的"条子",尽管我没有在视网膜显示器上尝试过这种情况).
另一个hacky解决方案:
myButton.customView = [[UIView alloc] init];