1

當前我顯示模態視圖控制器,(嵌入在導航中)與UIScrollView作爲子視圖。我想用UIPageViewController替換滾動視圖,但我不能調整UIPageViewController的模態顯示。解決方案,想法? 這是我現在有代碼:呈現UIPageViewController與模態呈現風格

UIViewController *viewController = [[UIViewController alloc] init]; 
    UINavigationController *modalNav = [[UINavigationController alloc] initWithRootViewController:viewController]; 
    UIBarButtonItem *dismiss = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
                      target:self 
                      action:@selector(dismissModalViewControllerAnimated:)]; 
    modalNav.navigationBar.topItem.leftBarButtonItem = dismiss; 
    modalNav.modalPresentationStyle = UIModalPresentationFormSheet; 
+0

你什麼意思,你不能調整頁面視圖控制器?問題是什麼? – rocky

+0

,因爲我用故事板創建了PageViewController,然後是ViewController,我在其中定義了頁面的佈局。我可以調整ViewController的大小,但模式演示文稿不起作用 – carlodonz

回答

0

視圖控制器可以被嵌入到彼此通過使用容器視圖。

刪除您的滾動視圖並將容器視圖放在其位置。你會看到默認情況下視圖控制器被嵌入它。刪除嵌入的segue,將UIPageViewController拖放到故事板並將其嵌入到容器視圖中。

它應該看起來像下圖。

enter image description here

0

更好的方法是創建一個視圖控制器,添加uipageviewcontrolller它的子視圖。

enter image description here

這裏是我的畫廊容器頁面代碼。我做了一個推SEGUE圖庫容器頁面,以免後患導航(現在PageViewController父視圖控制器畫廊集裝箱。)

import UIKit 

class GalleryContainerPage: UIViewController,UIPageViewControllerDataSource { 

private var pageViewController: UIPageViewController? 
    private let contentImages = ["person-icon.jpg", 
     "3807343799880.jpg","4701365629867.jpg","4713011921017.jpg"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.navigationController?.navigationBarHidden = false 



     // Do any additional setup after loading the view. 
    } 


    private func createPageViewController() { 

     let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as! UIPageViewController 

     pageController.dataSource = self 

     if contentImages.count > 0 { 
      let firstController = getItemController(0)! 
      let startingViewControllers: NSArray = [firstController] 
      pageController.setViewControllers(startingViewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) 
     } 

     pageViewController = pageController 
     addChildViewController(pageViewController!) 

     pageViewController!.didMoveToParentViewController(self) 
     self.view.addSubview(pageViewController!.view) 

    } 

private func setupPageControl() { 

    let appearance = UIPageControl.appearance() 
    appearance.pageIndicatorTintColor = UIColor.grayColor() 
    appearance.currentPageIndicatorTintColor = UIColor.whiteColor() 
    appearance.backgroundColor = UIColor.darkGrayColor() 
} 
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 

    let itemController = viewController as! PageItemController 

    if itemController.itemIndex > 0 { 
     return getItemController(itemController.itemIndex-1) 
    } 

    return nil 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 

    let itemController = viewController as! PageItemController 

    if itemController.itemIndex+1 < contentImages.count { 
     return getItemController(itemController.itemIndex+1) 
    } 

    return nil 
} 

private func getItemController(itemIndex: Int) -> PageItemController? { 

    if itemIndex < contentImages.count { 
     let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("ItemController") as! PageItemController 
     pageItemController.itemIndex = itemIndex 
     pageItemController.imageName = contentImages[itemIndex] 
     return pageItemController 
    } 

    return nil 
} 
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 

    return contentImages.count 
} 

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return 0 
} 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
    override func viewWillAppear(animated: Bool) { 

     setupPageControl() 
     createPageViewController() 
    } 

}