你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 容器控制器 (Container View Controller)

iOS 容器控制器 (Container View Controller)

編輯:IOS開發綜合

IOS 容器控制器 (Container View Controller)

一個控制器包括其他一個或多個控制器,前者為容器控制器 (Container View Controller),後者為子控制器 (Child View Controller)。UINavigationController、UITabBarController 是常用的容器控制器。本文引見自定義容器控制器的辦法。

自定義容器控制器 添加子控制器
- (void)displayContentController:(UIViewController *)content {
   [self addChildViewController:content];
   content.view.frame = [self frameForContentController];
   [self.view addSubview:self.currentClientView];
   [content didMoveToParentViewController:self];
}

留意,容器控制器的 addChildViewController: 辦法會調用子控制器的 willMoveToParentViewController: 辦法,因而不需求寫子控制器的 willMoveToParentViewController: 辦法。

移除子控制器
- (void)hideContentController:(UIViewController *)content {
   [content willMoveToParentViewController:nil];
   [content.view removeFromSuperview];
   [content removeFromParentViewController];
}

留意,子控制器的 removeFromParentViewController 辦法會調用 didMoveToParentViewController: 辦法,不必寫 didMoveToParentViewController: 辦法。

子控制器之間的轉變
- (void)cycleFromViewController:(UIViewController *)oldVC
               toViewController:(UIViewController *)newVC {
   // Prepare the two view controllers for the change.
   [oldVC willMoveToParentViewController:nil];
   [self addChildViewController:newVC];
 
   // Get the start frame of the new view controller and the end frame
   // for the old view controller. Both rectangles are offscreen.
   newVC.view.frame = [self newViewStartFrame];
   CGRect endFrame = [self oldViewEndFrame];
 
   // Queue up the transition animation.
   [self transitionFromViewController:oldVC toViewController:newVC
        duration:0.25 options:0
        animations:^{
            // Animate the views to their final positions.
            newVC.view.frame = oldVC.view.frame;
            oldVC.view.frame = endFrame;
        }
        completion:^(BOOL finished) {
           // Remove the old view controller and send the final
           // notification to the new view controller.
           [oldVC removeFromParentViewController];
           [newVC didMoveToParentViewController:self];
        }];
}

容器控制器的 transitionFromViewController:toViewController:duration:options:animations:completion: 辦法將 newVC 的 view 添加出去,執舉動畫 animations block,動畫完畢就移除 oldVC 的 view。

告訴子控制器的呈現和消逝
- (BOOL)shouldAutomaticallyForwardAppearanceMethods {
    return NO;
}

假如加上這一句,容器控制器就要在子控制呈現和消逝時告訴子控制器,辨別經過調用子控制器的 beginAppearanceTransition:animated: 辦法和 endAppearanceTransition() 辦法完成,不要直接調用子控制器的 viewWillAppear:、viewDidAppear:、viewWillDisappear:、viewDidDisappear: 辦法。

委托子控制器

重載 childViewControllerForStatusBarStyle 屬性,前往相應的子控制器,讓子控制器決議形態欄款式。當這個屬性發作變化,調用 setNeedsStatusBarAppearanceUpdate() 辦法更新形態欄款式。

容器控制器可以用子控制器的 preferredContentSize 屬性決議子控制器 view 的大小。

第三方容器控制器 ViewDeck

https://github.com/ViewDeck/ViewDeck

左右側滑視圖,完成側滑菜單功用。

SWScrollViewController

https://github.com/Silence-GitHub/SWScrollViewController

Scroll view 裡參加子控制器的視圖,能左右滑動切換子控制器。

SWSegmentedController

https://github.com/Silence-GitHub/SWSegmentedController

經過 UISegmentedControl 切換子控制器。

轉載請注明出處:http://www.cnblogs.com/silence-cnblogs/p/6370049.html


【iOS 容器控制器 (Container View Controller)】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁: