2013-03-30 35 views
0

我有两个视图:一个levelComplete视图和一个levelSelector视图。我想要做的是当levelComplete显示或ViewDidLoad发生在该视图上我想发送一个委托给级别选择器在视图中显示一个按钮,然后使该按钮UserInteractionEnabled,然后我将能够程序该按钮做一些事情,如果它不隐藏。Objective - C:通过代理隐藏按钮

回答

1

你想要通过委托来完成。因为你也可以以更简单的方式做到这一点。当你打电话给你的secondView时,只需告诉你的按钮隐藏。因此,您的修改后的代码调用第二视图控制器变为:

-(IBAction)passdata:(id)sender { 
    secondview *second = [[secondview alloc] initWithNibName:nil bundle:nil]; 
    self.secondviewData = second; 
    sender.hidden=YES; 
    secondviewData.passedValue = textfield.text; 
    [self presentModalViewController:second animated:YES]; 
} 

然后你就可以在你的看法负荷再次使用viewDidLoad中它设置为可见。如果需要,我可以告诉你如何通过代表来完成。 Lemme知道什么最好。

编辑 - 解决方案由代表

你secondView的头文件将作如下安排:

@protocol SecondViewHandlerDelegate <NSObject> 

- (void)viewHasBeenLoaded:(BOOL)success; 

@end 

@interface secondview :UIViewController { 
    IBOutlet UILabel *label; 
    NSString *passedValue; 
} 
@property (nonatomic, retain)NSString *passedValue; 

-(IBAction)back:(id)sender; 

@end 

然后,在secondView(.M)的执行文件,通过@synthesize delegate;第一合成委托。在此之后,在你secondView的viewDidLoad,添加以下行:

[[self delegate] viewHasBeenLoaded:YES]; 

这应该是足够为您secondView。现在到firstViewController,执行以下步骤:

在头文件(.h)中,导入第二视图和实现协议:

@interface ViewController :UIViewController <SecondViewHandlerDelegate>{ 
.. 
.. 
} 

在你firstViewController的执行文件(.M) ,实现此方法:

- (void)viewHasBeenLoaded:(BOOL)success 
{ 
    NSLog("Delegate Method Called"); 
    [myButton setHidden:YES]; 
} 

最后,在你的代码,当你调用secondView,加入这一行: secondview *秒= [[secondview页头] initWithNibName:无束:零] second.delegate = self; ...

这应该解决你的目的。如果您可以将答案标记为正确,我将不胜感激。谢谢:)

+0

这将是伟大的,如果你可以告诉我的代表,但我仍然对你的答案是伟大的 –

+0

好吧..请稍候回复。将现在更新我的答案.. –

+0

抱歉,但我对您的编辑有点困惑,因为您已经多次使用第二个视图,并且您曾经使用第一个视图,我可能很愚蠢。 –