在显示视图时调用void

时间:2010-09-22 12:24:09

标签: iphone views initialization

每次视图显示时都会调用 - (void)。 我在两个视图之间旋转,所以当我转到第二个视图然后返回到第一个视图时,我希望从第一个视图自动调用void 我试着这样做 - (void)viewWillAppear:(BOOL)动画和 - (void)viewDidLoad 通过在其中放置NSLog但是当我返回到第一个视图时它不会打印。 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果要使用第二个数据更新第一个视图,请在正在更新的模型上使用观察者。如果第二个视图作为子视图被删除,您可以观察子视图。或者,您可以使用块回调闭包。

在界面中:

IBAction(^doOnClose)(void);

@property (nonatomic, copy) IBAction(^doOnClose)(void);

在关闭第二个视图的方法中:

if(doOnClose) doOnClose();

最后从你的第一个视图中定义它:

view2.doOnClose = ^{/*Do this when view 2 closes*/};

答案 1 :(得分:0)

我在app delegate中有两种方法

-(void)goTo1{ 

 [self.window addSubview:[viewController view]]; 
 [settingsViewController.view removeFromSuperview];


 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:1.0];
  //removing the settingsViewController form the view and setting the animation
  [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:NO];

  [UIView commitAnimations];
  [settingsViewController release];
  settingsViewController = nil; }

-(void)goTo2{

 //calling the .xib file and the SettingsViewController
 SettingsViewController *aSettingsView = [[SettingsViewController alloc] initWithNibName:@"Settings" bundle:nil];
 [self setSettingsViewController:aSettingsView];
 [aSettingsView release];

 [self.window addSubview:[settingsViewController view]];
 //moving the view 30px down
 [[settingsViewController view] setFrame:CGRectMake(0, 20, 320, 460)];

 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:1.0];
 //setting the animation
 [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:window cache:YES];

 [UIView commitAnimations]; 
 [webskiAppBetaViewController release];
 webskiAppBetaViewController = nil;
}

和2个视图控制器中的IBActions 第一个

-(IBAction)goToView2{

 WebskiAppBetaAppDelegate *mainDelegate = (WebskiAppBetaAppDelegate *)[[UIApplication sharedApplication] delegate];
 [mainDelegate goTo2]; 
}

和第二个

-(IBAction)goToView1{
 WebskiAppBetaAppDelegate *maniDelegate = (WebskiAppBetaAppDelegate *)[[UIApplication sharedApplication] delegate];
 [maniDelegate goTo1];
}

所以现在当我调用goToVIew1时我还想运行一个在视图中的方法1

类似这样的事情

-(IBAction)goToView1{

 WebskiAppBetaAppDelegate *maniDelegate = (WebskiAppBetaAppDelegate *)[[UIApplication sharedApplication] delegate];
 [maniDelegate goTo1];
[self methodInFirstVIew]; //this method is in the first view
}