我有两个视图:levelComplete视图和levelSelector视图。我想做的是在该视图上显示levelComplete或ViewDidLoad
时,我想向级别选择器发送一个委托,以在视图中显示一个按钮,然后将该按钮设为UserInteractionEnabled
,这样我将然后可以对该按钮进行编程,以使其在未隐藏的情况下执行某些操作。
最佳答案
您需要通过委托来完成。因为您也可以用更简单的方式来做到这一点。当您调用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重新加载视图时,可以将其设置为可见。我可以根据需要告诉您如何通过代表进行操作。雷姆知道什么最有效。
编辑-代表解决方案
您的secondView的Header文件将如下所示:
@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 * second = [[secondview分配] initWithNibName:nil bundle:nil];
second.delegate =自我;
...
那应该解决您的目的。如果您也可以将答案标记为正确,我将不胜感激。谢谢 :)