我有两个视图,一个是levelComplete视图,另一个是levelSelector视图。我想要做的是当levelComplete显示或在该视图上出现ViewDidLoad
时,我想将一个委托发送到关卡选择器以在视图中显示一个按钮,然后创建该按钮UserInteractionEnabled
那么我就可以编程那个按钮来做一些事情,如果没有隐藏的话。
答案 0 :(得分:1)
您希望通过委托来完成。因为你可以用更简单的方式做到这一点。当您调用第二个视图时,只需告诉您的按钮隐藏即可。因此,调用第二个视图控制器的修改代码变为:
-(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;
合成委托。在此之后,在viewDidLoad
secondView中添加以下行:
[[self delegate] viewHasBeenLoaded:YES];
这对你的第二个视图应该足够了。现在进入firstViewController,执行以下步骤:
在头文件(.h)中,导入第二个视图并实施协议:
@interface ViewController :UIViewController <SecondViewHandlerDelegate>{
..
..
}
在firstViewController的实现文件(.m)中,实现此方法:
- (void)viewHasBeenLoaded:(BOOL)success
{
NSLog("Delegate Method Called");
[myButton setHidden:YES];
}
最后,在您调用secondView时的代码中,添加以下行: secondview * second = [[secondview alloc] initWithNibName:nil bundle:nil]; second.delegate = self; ...
这应该可以解决你的目的。如果你能把答案标记为正确,我将不胜感激。谢谢:))