如何动态隐藏视图中的按钮?

jpm*_*jpm 36 iphone cocoa-touch

我想根据某个条件动态隐藏我的一个视图中的按钮.

我尝试在视图控制器的-viewWillAppear方法中添加一些代码,在显示实际视图之前隐藏按钮,但我仍然不知道如何做到这一点.

我通过IBOutlet引用了按钮,但我不确定如何从这里向前推进.作为参考,这是一个UIBarButtonItem实例.

Ben*_*ieb 54

如果您试图隐藏UIBarButtonItem,您实际上必须修改父栏的内容.如果是UIToolBar,则需要将bar的items数组设置为不包含项目的数组.

NSMutableArray     *items = [[myToolbar.items mutableCopy] autorelease];
[items removeObject: myButton];
myToolbar.items = items;
Run Code Online (Sandbox Code Playgroud)


小智 20

将条形项设置为nil.

例如:

self.navigationItem.leftBarButtonItem = nil;
Run Code Online (Sandbox Code Playgroud)


小智 11

所以我尝试了Ben的胜利方法,但最后我发现它对我的目的是错误的 - 尽管我确定这取决于你想要做什么.我试图仅在某些条件下显示导航栏按钮,然后在条件不再满足时立即隐藏它(在我的情况下,它是用于隐藏与UITextView关联的键盘的"完成"按钮.它应该只是当用户在文本视图中键入时显示).我的步骤如下:

  1. 我在UIViewController类中添加了一个UIBarButtonItem作为属性.我在initWithNibName方法中实例化它.

  2. 一旦用户开始在文本视图中键入,我就在导航栏中将UIBarButtonItem属性指定为rightBarButtonItem.

  3. 当用户完成输入时,我将UIBarButtonItem属性设置为nil.

它的工作就像一个魅力.我在下面添加一些代码示例.

首先在我的视图控制器init方法中实例化按钮:

barButtonItemDone = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
Run Code Online (Sandbox Code Playgroud)

然后我将其设置为委托方法中的右侧栏按钮,一旦用户开始编辑文本视图,就会调用该按钮:

self.navigationItem.rightBarButtonItem=[self barButtonItemDone];
Run Code Online (Sandbox Code Playgroud)

最后,当单击按钮本身时,会调用一个名为"done"的方法,我只是在该方法中将rightBarButtonItem设置为nil:

self.navigationItem.rightBarButtonItem=nil;
Run Code Online (Sandbox Code Playgroud)


Sar*_*ara 10

如果所有人都试图隐藏的是导航栏中的后退按钮,则有一种更简单的方法:

self.navigationItem.hidesBackButton = YES;
Run Code Online (Sandbox Code Playgroud)

从开发者文档引用:

hidesBackButton

一个布尔值,用于确定是否隐藏了后退按钮.

@property(nonatomic,assign)BOOL hidesBackButton

讨论

如果此导航项是最高项时隐藏了后退按钮,则为YES; 否则,不.默认值为NO.

可用性

适用于iPhone OS 2.0及更高版本.


Mic*_*ael 7

这有点像黑客,但它适用于我的情况(它正确处理动态间距):

隐藏:

myButton.width = 0.1;
Run Code Online (Sandbox Code Playgroud)

显示:

myButton.width = 0.0;
Run Code Online (Sandbox Code Playgroud)

宽度为0.0是"自动宽度",宽度为0.1时,按钮完全消失(甚至不是按钮的"条子",尽管我没有在视网膜显示器上尝试过这种情况).


jon*_*mps 5

另一个hacky解决方案:

myButton.customView = [[UIView alloc] init];
Run Code Online (Sandbox Code Playgroud)