我有两个视图: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 =自我;
    ...

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

10-08 08:45