2013-01-10 203 views
2

我正在爲一個應用程序添加一些功能,這與iOS上的Springboard上的應用程序切換抽屜非常相似。我希望能夠擁有一個我可以點擊的按鈕,這將激活視圖的y座標,使另一個視圖暴露在底部。就像我說的,非常類似於iOS上的主頁按鈕雙擊功能。如何使父視圖控制器管理兩個子視圖控制器

做了一些環視後,看起來我需要將兩個子視圖控制器包裝到一個父視圖控制器中。

我該如何去做這件事?現有的視圖控制器非常複雜,所以我很難搞清楚從哪裏開始。

+1

如果您已經擁有兩個子VC,您只需製作另一個VC來管理子VC的「視圖」的放置位置,並且還可以強力參考子VC。它也應該負責處理與按鈕的交互。這有幫助嗎? –

+0

是的,幫助。那麼層次結構呢?當前視圖C製作並推送視圖D.這個新的容器視圖是否變成D和D包含E&F類型的東西? – Lizza

+0

是的,這是非常正確的。 –

回答

2

我不知道你需要使用父視圖控制器來做到這一點。這段代碼爲我做了我想做的事。我有一個BOOL ivar來跟蹤是否顯示底部視圖,並使用主視圖中的相同按鈕在兩種狀態之間切換。

-(IBAction)slideInController:(UIButton *) sender { 
    if (viewRevealed == NO) { 
     next = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"]; 
     next.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + self.view.frame.size.height, self.view.frame.size.width, 100); // my NextController's view was made 100 points high in IB. 
     [self.view.window addSubview:next.view]; 
     [UIView animateWithDuration:.6 animations:^{ 
      self.view.center = CGPointMake(self.view.center.x, self.view.center.y - 100); 
      next.view.center = CGPointMake(next.view.center.x, next.view.center.y - 100); 
     } completion:^(BOOL finished) { 
      viewRevealed = YES; 
     }]; 
    }else{ 
     [UIView animateWithDuration:.6 animations:^{ 
      self.view.center = CGPointMake(self.view.center.x, self.view.center.y + 100); 
      next.view.center = CGPointMake(next.view.center.x, next.view.center.y + 100); 
     } completion:^(BOOL finished) { 
      [next.view removeFromSuperview]; 
      viewRevealed = NO; 
     }]; 
    } 
} 

我通常使用容器視圖控制器來做這種事情,但這個工作,並且非常簡單。

+0

完美。這正是我需要的! – Lizza

+0

@Casper,這可能會導致問題,如果你想在主視圖中做任何事情,而底部視圖顯示(除了再次點擊按鈕移出底部視圖)。 – rdelmar

+0

那麼你仍然可以與視圖進行交互,對吧?只是頂部,然而很多像素將不在屏幕的頂部? – Lizza

0

您可能要使用UINavigationController,然後在點按按鈕後再按下新的視圖控制器。所以你會有你的主UIViewController,它會有你不同的選擇。當點擊該按鈕時,您將創建視圖控制器的一個實例,並將該視圖控制器推到堆棧頂部。您的代碼可能是這個樣子

-(IBAction)ViewControllerOneTapped:(id)sender 
{ 
    UIViewController *vcOne = [[UIViewController alloc] initWithNibName:@"ViewControllerOne" bundle:nil]; 
    [self.navigationController pushViewController:vcOne animated:YES]; 
} 

你的最終代碼將是更爲複雜的比別人可以寫出來供你一路但是這是你可能要採取的大方向。

+1

這不會給OP找到的那種轉換。 – rdelmar

相關問題