【问题标题】:Trigger events when switching views切换视图时触发事件
【发布时间】:2011-12-08 09:25:00
【问题描述】:

这很容易。

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

firstView 是根视图。

我从 firstView 加载 secondView:

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

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

当我单击该按钮时,我会返回 firstView:

[self.view removeFromSuperView];

问题来了:

firstView -> secondView时,触发secondView中的viewDidLoad

当我在 secondView 中使用 removeFromSuperView 返回时,如何触发事件以通知 firstView?

【问题讨论】:

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

标签: objective-c xcode events view switch-statement


【解决方案1】:

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

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

但是,如果您只想从 Interface Builder 创建一个视图,然后将其添加到您的第一个视图之上,您可以使用通知中心在您从第二个视图单击后退按钮时发布事件:

- (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 !");
}

希望对你有帮助!

【讨论】:

  • xxxAppDelegate *objDelegate=(xxxAppDelegate *)[[UIApplication sharedApplication] delegate]; [[objDelegate firstViewController] doThisWhenGoingBack];
  • 我刚刚使用了委托并将其添加到[self.view removeFromSuperView]下面;它工作得很好。顺便说一句,谢谢你!
猜你喜欢
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多