如何隐藏不同视图控制器中的按钮?

问题描述:

我正在使用此代码来隐藏不同视图控制器中的按钮,但按钮在隐藏其他视图控制器中的按钮时不会隐藏。如何隐藏不同视图控制器中的按钮?

这是我使用隐藏在其他视图控制器按钮的代码:

[self dismissModalViewControllerAnimated:YES]; 

    NSLog(@"Exited"); 

    ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 

    [vc.mainbutton1 setHidden:YES]; 

这是为什么不工作?

谢谢!

+0

从您对场景的描述中不太清楚。但如果我正确理解你,你需要设置委托。刚刚实例化一个名为vc的ViewController实例并尝试[vc.mainbutton1 setHidden:YES]将不起作用。因为这个新创建的vc不是您想要隐藏mainbutton1的相同ViewController实例。 – user523234

在ViewController控制器中取一个BOOL变量,并进行属性和合成。 并做到这一点。

ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
vc.check = YES; 
在视图控制器的viewDidLoad

写这个

if(self.check) 
    [mainbutton1 set hidden:YES]; 
+1

如果你喜欢我的回答,将其作为正确答案 – Tendulkar

+0

难道只是在应用程序启动时加载它时才隐藏按钮?我需要它只隐藏按钮时,按下我的其他视图控制器... – pixelbitlabs

+0

不明白。详细解释 – Tendulkar

这是不工作的原因是因为,即使您已alloc'd并妥善init'd的视图控制器,实际的元素vc ViewController(包括mainbutton1)尚未加载。

杀手有正确的想法(我正在投票他的想法)。

要么把一个BOOL属性mainButton1设置为隐藏的观点出现时,或致电[mainButton1 setHidden: YES]你明确地显示视图(通过动画或添加子视图或其他)。

从你的问题听起来好像你要隐藏在现有的视图控制器的按钮,而在你的代码中创建一个新的

ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
[vc.mainbutton1 setHidden:YES]; 

要么认为你观察控制器不是一个您期望或mainbutton1插座未正确连接。您可以通过记录其内存地址来检查内存控制器是否是您期望的内存控制器。

NSLog(@"Hid button for view controller %p", vc); 

而且在视图控制器的viewDidAppear回调

NSLog(@"In viewDidAppear for view controller %p", self); 

其他的答案应该工作,除非做同样的...

看你的代码,我要猜你正在尝试隐藏显示模态视图的viewController上的按钮?

如果这是正确的,那么您正在做的事情将不起作用,因为您正在创建ViewController的新实例,该实例不是您想要使用的已存在的viewController。

尽管文档说可以从所呈现的模式视图调用[self dismissModalViewControllerAnimated:YES];很好,但我倾向于设置一个委托来处理解雇,就像在Apple的utitliy应用程序模板中一样。

看来你想要一个特定的按钮被隐藏,如果事情已经发生在别的地方。

你可能有点像黑客(但我不介意那么多)用你的AppDelegate上的变量来控制它。

当“东西”正在发生“别的地方”,这样做:

MyAppDelegate *appDelegate = [[(MyAppDelegate *)UIApplication sharedApplication] delegate]; 
appDelegate.shouldHideThatOtherButtonLater = YES; 

然后,当你以后创建新的视图控制器上,你可以使用这个值来确定您的按钮应该是可见的或不喜欢这样的:

ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 

MyAppDelegate *appDelegate = [[(MyAppDelegate *)UIApplication sharedApplication] delegate]; 
[vc.mainbutton1 setHidden: appDelegate.shouldHideThatOtherButtonLater ]; 

你会在这种情况下,必须通过创建和合成是shouldHideThatOtherButtonLater属性来准备这个AppDelegate中。