2012-04-14 102 views
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]; 
} 
    } 

此做了很好的动画,但不切换视图控制器。

请帮忙吗?

编辑: 在第一个视图控制器内部放置另一个视图以及如何切换视图将会很有帮助。

回答

1

里面,你不应该被交换或按照您的操作混合视图控制器的内容视图。如果你想这样做,你需要在iOS 5中使用新的父视图控制器支持。

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

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

3

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

使用iOS5 Apple提供了一种通知容器视图控制器(这是普通的视图控制器)使用所谓的“视图控制器遏制”来改变其包含的VC的方式。有一个视频来自WWDC 2011并在iTunes上发布(仅限注册开发者),您可以看到。 基本上这种方法增加了一些方法,允许通知容器视图控制器包含其VC结构中的变化。我不会在这里输入很多细节,并且请看看WWDC视频并阅读this stack overflow answerthis post。我认为后者正是你想要的。

+0

什么是视频的名字吗? – 2012-04-14 17:00:14

+0

视频被命名为“Implementing UIViewController Containment”,会话102,2011年6月15日。您可以通过iTunes Store访问它。 – smileBot 2013-02-20 21:07:37

0

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

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

把一个UIView一个UIViewController

[[self view] addSubview:view1]; 

而且我会用UIView.hidden就如其他海报上写着交换意见

view1.hidden = YES; 
view2.hidden = NO; 
+0

我可以在Interface Builder中看到它吗? – 2012-04-14 16:59:48