2012-04-14 96 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