2011-12-08 98 views
0

这很简单。切换视图时触发事件

假设我有两个视图:firstView和SecondView。

firstView是ROOT视图。

予加载secondView从的firstView:

secondView *secondViewController; 
secondViewController = [[SecondView alloc] 
         initWithNibName:@"SecondView" bundle:nil]; 
[self.view addSubview:SecondViewController.view]; 

我在secondView添加了一个 “返回” 按钮。

当我点击该按钮,我回去的firstView:

[self.view removeFromSuperView]; 

这里有一个问题:

当的firstView - > secondView,viewDidLoad中在secondView被触发。

我怎样才能触发到事件通知的firstView当我回去secondView使用removeFromSuperView

+0

您可以使用NSNotificationCenter在第二个视图被删除时侦听和发布事件。或者你可以从第二个视图调用第一个视图“view will appear”方法。或者你可以在你的第二个视图控制器上创建一个委托,并在调用“view will disappear”方法时对第一个控件进行回调。许多方法在类之间传递消息。我会去通知我想的。这不会在您的视图控制器之间创建紧密的依赖关系。 –

回答

0

你想要做什么?也许你只是想从你的第一个视图控制器到你的第二个视图控制器?然后回到你的第一个视图控制器?在这种情况下,只是做这样的,如果你的第一个控制器在一个导航控制器已经embbeded:

[self.navigationController pushViewController:secondViewController animated:YES]; 

但如果你只是想创建界面生成器视图,然后将其添加您的第一个视图上面,你可以使用通知中心,当你从你的第二个观点,你的背部按钮来发布事件:

- (void) backButtonClicked:(id)sender { 
    [self.view removeFromSuperView]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"back" 
                 object:self.view]; 
} 

然后,您可以添加一个观察者这个事件在你的第一个视图控制器,这样的:

- (void) pushSecondViewController { 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(secondViewDidGoBack:) 
               name:@"back" 
               object:secondViewController.view]; 

    SecondView *secondViewController = [[SecondView alloc] initWithNibName:@"SecondView" 
                    bundle:nil]; 
    [self.view addSubview:secondViewController.view]; 
} 

- (void) secondViewDidGoBack:(NSNotification *)notification { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 

    NSLog(@"My Second View Did Go back !"); 
} 

我希望这会帮助你!

+0

xxxAppDelegate * objDelegate =(xxxAppDelegate *)[[UIApplication sharedApplication] delegate]; [[objDelegate firstViewController] doThisWhenGoingBack]; –

+0

我刚刚使用委托,并在下面添加它[self.view removeFromSuperView];它工作完美。顺便说一句,谢谢你一路! –