我想根据某种情况在我的一个视图中动态隐藏按钮。
我尝试在视图控制器的-viewWillAppear
方法中添加一些代码,在显示实际视图之前隐藏按钮,但我仍然不知道该怎么做。
我通过IBOutlet引用了按钮,但我不确定如何从这里继续前进。作为参考,这是一个UIBarButtonItem实例。
答案 0 :(得分:54)
如果您试图隐藏UIBarButtonItem,您实际上必须修改父栏的内容。如果它是一个UIToolBar,你需要将bar的items数组设置为一个不包含你的项目的数组。
NSMutableArray *items = [[myToolbar.items mutableCopy] autorelease];
[items removeObject: myButton];
myToolbar.items = items;
答案 1 :(得分:20)
将条形项设置为nil。
例如:
self.navigationItem.leftBarButtonItem = nil;
答案 2 :(得分:11)
所以我尝试了Ben的获胜方法,但最终我发现这对我的目的是错误的 - 虽然我确定这取决于你想要做什么。我试图仅在某些条件下显示导航栏按钮,然后在条件不再满足时立即隐藏它(在我的情况下,它是用于隐藏与UITextView关联的键盘的“完成”按钮。它应该只是当用户在文本视图中键入时显示)。我的步骤如下:
我添加了一个UIBarButtonItem作为 我的UIViewController中的属性 类。我在实例中实例化它 initWithNibName方法。
我将UIBarButtonItem属性指定为 右栏中的barButtonItem为 用户开始输入后立即 文本视图。
我设置了UIBarButtonItem属性 当用户完成输入时为零。
它的工作就像一个魅力。我在下面添加了一些代码示例。
首先在我的视图控制器init方法中实例化按钮:
barButtonItemDone = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
然后我将其设置为委托方法中的右侧栏按钮,一旦用户开始编辑文本视图,就会调用该按钮:
self.navigationItem.rightBarButtonItem=[self barButtonItemDone];
最后,当单击按钮本身时,会调用一个名为“done”的方法,我只是在该方法中将rightBarButtonItem设置为nil:
self.navigationItem.rightBarButtonItem=nil;
答案 3 :(得分:10)
如果所有人都试图隐藏的是导航栏中的后退按钮,则有一种更简单的方法:
self.navigationItem.hidesBackButton = YES;
引用开发者文档:
hidesBackButton
一个布尔值,用于确定后退按钮是否隐藏。
@property(nonatomic,assign)BOOL hidesBackButton
讨论
如果此导航项位于顶部时隐藏了后退按钮,则为“是” 项目;否则,不。默认值 是的。
状况
适用于iPhone OS 2.0及更高版本。
答案 4 :(得分:7)
这有点像黑客,但它适用于我的情况(它正确处理动态间距):
隐藏:
myButton.width = 0.1;
显示:
myButton.width = 0.0;
0.0的宽度是“自动宽度”,宽度为0.1时,按钮完全消失(甚至不是按钮的“条子”,但我没有在视网膜显示器上试过这个。)
答案 5 :(得分:5)
另一个hacky解决方案:
myButton.customView = [[UIView alloc] init];
答案 6 :(得分:2)
对此最好的解决方案是技术性较差。您需要做的就是创建常规导航栏(顶部)或工具栏(底部),但不使用可选按钮。然后创建另一个相同但更短的条,然后将其放置在您想要可选按钮的部分,并在第二个较短的条上创建可选按钮。
现在,您可以在整个附加栏上拨打hidden = YES
。
酒吧与我无缝重叠,您的里程可能会有所不同。
答案 7 :(得分:2)
这个答案是关于基于文本的UIBarButtonItems,但是,同样的概念也可以应用于其他类型的按钮。请注意,这将允许隐藏和再次显示该项目。上面的许多答案(例如,将按钮的值设置为nil,如果需要,则不允许重新显示按钮)。
TL; DR:
if (shouldShowMyBarButtonItem) {
self.myBarButtonItem.title = nil;
self.myBarButtonItem.action = nil;
} else if (!shouldShowMyBarButtonItem) {
self.myBarButtonItem.title = @"Title";
self.myBarButtonItem.action = @selector(mySelector:);
}
长版:
我试图隐藏的UIBarButtonItem位于UIToolbar中,而不是UINavigationBar,因此访问导航项左侧(或右侧)barButtonItem属性的所有建议都不适用于我。另外,如上所述,我希望在情况发生变化时重新显示按钮。
迈克尔的建议最接近于工作,但至少在iOS 7上,仍然显示了一个非常的显示按钮的小条子。在我的应用程序中,当它不应该可用时点击该项目是不可接受的。上面的代码隐藏了按钮,并且关键地停用了按钮。
我在私有刷新方法中调用上述代码,该方法在用户事件发生时调用。
答案 8 :(得分:1)
这就是我对不属于导航栏的按钮项所做的(其中Blank.png是我创建的空白图像,它与它所替换的图像大小相同):
theButton.enabled = NO;
theButton.image = [UIImage imageNamed: @"Blank.png"];
答案 9 :(得分:1)
Ben的回答在技术上是正确的,但是当我在我的自定义UIToolbar上尝试时,这些项目以我不喜欢的方式展开,因为我使用的是UIBarButtonSystemItemFlexibleSpace项目。
如果您希望其他物品停留在同一个地方,您必须将灵活空间设置为固定空间,或尝试我所做的事情:
[filterBarButton.customView setHidden:YES];
注意:这仅在您的UIBarButtonItem使用自定义视图时才有效。
答案 10 :(得分:1)
如果您向UIButton
添加UIBarButtonItem
而不是仅使用UIBarButtonItem
。
然后,您可以将UIButton.hidden
分配给TRUE
或YES
,并且它(以及UIBarButtonItem
)将不会显示或处于活动状态。
希望有所帮助。
答案 11 :(得分:-13)
只需将按钮的隐藏属性设置为true:
myButton.hidden = YES;