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

时间:2011-11-12 11:16:18

标签: iphone objective-c ios xcode viewcontroller

我正在使用此代码隐藏不同视图控制器中的按钮,但是当按下该按钮以隐藏其他视图控制器中的按钮时,该按钮不会被隐藏。

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

    [self dismissModalViewControllerAnimated:YES];

    NSLog(@"Exited");

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

    [vc.mainbutton1 setHidden:YES];

为什么这不起作用?

谢谢!

5 个答案:

答案 0 :(得分:4)

在ViewController控制器中获取BOOL变量并生成属性并进行合成。  并且这样做。

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

在视图控制器viewdidload中  写这个

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

答案 1 :(得分:1)

其他答案应该有效,除非......

根据你的代码判断我猜你是想在viewController上隐藏一个显示模态视图的按钮?

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

虽然文档说可以从呈现的模态视图中调用[self dismissModalViewControllerAnimated:YES];,但我倾向于设置一个代理来处理解雇,就像Apple的utitliy app模板一样。

答案 2 :(得分:0)

这不起作用的原因是因为即使你已正确地分配和初始化ViewController,那个vc ViewController(包括mainbutton1)的实际元素还没有被加载然而。

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

在视图显示时设置一个BOOL属性以将mainButton1设置为隐藏,或者在 之后调用[mainButton1 setHidden: YES] 以明确显示视图(通过动画或添加子视图或其他)。

答案 3 :(得分:0)

根据您的问题,您似乎想隐藏现有视图控制器中的按钮,而在您的代码中,您正在创建一个新的

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

您观察到的视图控制器不是您期望的视图控制器或主按钮1插座未正确连接。您可以通过记录其内存地址来检查内存控制器是否是您期望的内存控制器。

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

在ViewController的viewDidAppear回调中做同样的事情

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

答案 4 :(得分:0)

如果某些事情发生在其他地方,你似乎想隐藏某个按钮。

你可能在某种程度上像黑客一样(但我并不介意)用AppDelegate上的变量来控制它。

当“某事”发生在“其他地方”时,请执行以下操作:

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

然后,当您稍后创建新的ViewController时,您可以使用此值来确定您的按钮是否应该可见:

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

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

在这种情况下,您必须通过创建和合成shouldHideThatOtherButtonLater属性来为此准备AppDelegate。