0

我试图搜索这个站点和整个互联网,但我还没有找到一种方法可以让我在多个视图控制器之间切换同时在它们之间共享数据。我尝试使用以下代码(第一个方法调用另一个方法然后切换视图):

-(IBAction) choosePhoto:(id)sender {
[self startMediaBrowserFromViewController: self
                            usingDelegate: self];
if(firstViewController.view.superview == nil)
{
    [secondViewController viewWillAppear:YES];
    [firstViewController viewWillDisappear:YES];

    [firstViewController.view removeFromSuperview];
    [self.view insertSubview:self.secondViewController.view atIndex:0];

    [firstViewController viewDidDisappear:YES];
    [secondViewController viewDidAppear:YES];
}

//3. now add animation
[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//blue view will appear by flipping from right
if (secondViewController.view.superview == nil)
{
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight 
                           forView:self.view cache:YES];

    [secondViewController viewWillAppear:YES];
    [firstViewController viewWillDisappear:YES];

    [firstViewController.view removeFromSuperview];
    [self.view insertSubview:self.secondViewController.view atIndex:0];

    [firstViewController viewDidDisappear:YES];
    [secondViewController viewDidAppear:YES];
}
[UIView commitAnimations];
    }

- (IBAction)switchViews:(id)sender {
if(self.secondViewController.view.superview == nil)
{
    [firstViewController.view removeFromSuperview];
    [self.view insertSubview:secondViewController.view atIndex:0];
}
    }

这做了一个很好的动画,但不会切换视图控制器。

请帮忙?

编辑:还将另一个视图放在第一个视图控制器中以及如何切换视图会有所帮助。

4

3 回答 3

3

在您的代码中,您实际上是在切换视图而不是视图控制器。这意味着从视图控制器内部消息传递的角度来看(例如:视图加载/卸载、视图出现/消失、自动旋转),没有任何变化,原来的“当前”视图控制器仍将位于顶部。现在在 iOS 中,这通常使用容器视图控制器进行管理,即“管理”一组子视图控制器并负责内部消息传递和转换的视图控制器。最常见的情况是 UINavigationController 和 UITabBarController,在 iPad 上您还可以看到 UISplitViewController 和 PageViewControllers。

在 iOS5 中,Apple 提供了一种方法来通知容器视图控制器(这是一个普通的视图控制器)其包含的 VC 的更改,使用所谓的“视图控制器包含”。您可以看到一段取自 WWDC 2011 并在 iTunes 上发布的视频(仅限注册开发者)。基本上,这种方法添加了一些方法,允许通知容器视图控制器其包含的 VC 结构中的更改。我不会在这里详细介绍并邀请观看 WWDC 视频并阅读此堆栈溢出答案此帖子。我认为后者正是你要找的。

于 2012-04-14T16:41:54.523 回答
1

正如另一张海报所说,您不应该像正在做的那样交换或混合视图控制器的内容视图。如果你想这样做,你需要使用 iOS 5 中新的父子视图控制器支持。

如果您确实使用 iOS 5 中新的父视图控制器支持,那么有一个非常酷、非常强大的方法,称为 transitionFromViewController:toViewController:duration:options:animations:completion: 可以为您完成大部分繁重的工作。它很容易使用。

(我还没有看过关于父/子视图控制器的 WWDC 视频,但这将是一个很好的起点。我刚开始使用新方法。)

于 2012-04-14T23:40:34.707 回答
0

您应该使用 UINavigationController 在 UIViewController 之间切换。

[[self navigationController] pushViewController:firstViewController animated:YES];

将 UIView 放入 UIViewController

[[self view] addSubview:view1];

我会使用 UIView.hidden 来切换视图

view1.hidden = YES;
view2.hidden = NO;
于 2012-04-14T16:44:07.437 回答