0

我有一個項目是一個標籤欄控制器。每個標籤通常都有一個UINavigationController。我遇到的問題是:我需要一個新的導航欄,其中包含大量導航(大約30個導航項目分組爲4-8組)。問題:我的導航欄已滿(不能使用導航控制器(或欄)。我需要的是在導航欄下面的導航欄(它有一個全局搜索欄和其他全局圖標填充它)。我如何實現這個最好的?如何導航UITabBarController內的UINavigationController?

我現在有什麼:我已經創建了一個UIScrollView,作爲我的「手滾」導航欄,它是一個scrollView,因爲我不知道(前進)導航項目有多少個「分組」(目前只有4個),每個組都由一個UIButton ,其中一些應該立即呈現一個視圖,另一些則會展示帶有更多導航項目的彈出窗口,當選擇該視圖時將呈現視圖。

問題:我想要在上述導航視圖下的「內容視圖」,我可以根據用戶的導航選項呈現內容。我必須支持iOS 5.0,所以我不能使用故事板容器視圖(不幸的是)。我將介紹3種類型的內容視圖(可能更多),我希望將其創建爲單獨的視圖控制器,然後在我的導航欄中選擇適當的視圖控制器。有我可以使用的第三方導航控制器嗎?我必須「自己滾動」嗎?任何建議將不勝感激。

這裏是什麼,我需要,實現了「掌摑在一起」圖片: enter image description here

+0

你可以添加你想要的圖片嗎? – LuisEspinoza

+0

好的。我打了一個耳光,貼在我的問題上。標籤欄和導航欄已存在,我無法在該標籤上使用頂部的導航欄進行導航。根據我手卷UIScrollBar中的導航選擇,我將在內容視圖中呈現一些內容。也許在一個網格樣式佈局中,也許在一個封面流程中,也許是一個Web視圖。我將有不同的「模板」作爲視圖控制器來呈現它們自己的複雜視圖層次結構。 – HackyStack

+0

你的問題沒有清楚說明。我們對你的各種控制器知之甚少,無法判斷你是否需要「自己推出」。如果繼承'UIViewController's是「roll your own」,那麼,是的,你必須這樣做。 – Mundi

回答

0

我會讓你叫什麼內容查看主視圖的子視圖,並用它作爲視圖你將添加一個childViewController的視圖。如果你還沒有閱讀過自定義容器控制器,你應該這樣做,但使用它們的基本方式是這樣的。

控制器的您在您的問題中顯示的視圖將是自定義容器控制器。你可以在viewDidLoad方法加載了一個初始的控制器,然後切換控制器在你的子視圖(我叫它self.containerView)響應用戶從您的滾動條選擇的東西:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    UIViewController *initial = [self.storyboard instantiateViewControllerWithIdentifier:@"InitialVC"]; 
    [self addChildViewController:initial]; 
    [initial.view.frame = self.containerView.bounds]; 
    [self.containerView addSubview:initial.view]; 
    self.currentController = initial; 
} 

-(void)switchToNewViewController:(UIViewController *) cont { 
    [self addChildViewController:cont]; 
    cont.view.frame = self.containerView.bounds; 
    [self moveToNewController:cont ]; 
} 

-(void)moveToNewController:(UIViewController *) newController { 
    [self.currentController willMoveToParentViewController:nil]; 
    [self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{} 
     completion:^(BOOL finished) { 
      [self.currentController removeFromParentViewController]; 
      [newController didMoveToParentViewController:self]; 
      self.currentController = newController; 
     }]; 
} 

這應該給你基本的想法。我從我的一個測試項目中獲得了這個,所以它可能需要稍微調整一下。

+0

我希望不必這樣做,因爲它有巨大的缺陷和影響,但看起來這是我唯一的選擇。 – HackyStack

+0

@HackyStack,我沒有真正注意到很多缺陷。我看到的問題有時與子視圖的大小(和旋轉)有關。通常,我現在使用佈局約束,而不是直接設置框架,但兩種方法都可以工作。 – rdelmar

相關問題