在Tab Swift中使用页面视图控制器

我的工作很远:

所以我有一个标签栏,看起来像这样:

在这里输入图像说明

当我点击“食堂”我想要被导向到页面视图控制器,我可以在不同的页面之间滑动,但留在同一个选项卡上。

我有这个工作:

我有这样的故事板设置:

在这里输入图像说明

正如你所看到的,上面的代码来自Tab Bar Controller。

第三个视图(Can Page控制器,ID:“CanItemController”)用于页面视图中的所有页面。

上面的第二个视图(Page View Controller,ID:“CanPageController)用于控制Pages(duh)

第一个视图(CanteenViewController)包含所有的代码,并进行所有的连接。 这就是一切的继续。 这个类里面的代码在这里:

import UIKit class CanteenViewController: UIViewController, UIPageViewControllerDataSource { // MARK: - Variables private var pageViewController: UIPageViewController? private let contentImages = ["Radar-512.png", "dartp.png", "roomp.png", "abnews.png", "canteenp.png"]; override func viewDidLoad() { super.viewDidLoad() createPageViewController() setupPageControl() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } private func createPageViewController() { let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("CanPageController") 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!) self.view.addSubview(pageViewController!.view) pageViewController!.didMoveToParentViewController(self) } private func setupPageControl() { let appearance = UIPageControl.appearance() appearance.pageIndicatorTintColor = UIColor.grayColor() appearance.currentPageIndicatorTintColor = UIColor.whiteColor() appearance.backgroundColor = UIColor.darkGrayColor() } // MARK: - UIPageViewControllerDataSource func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { let itemController = viewController as! CanPageItemController if itemController.itemIndex > 0 { return getItemController(itemController.itemIndex-1) } return nil } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { let itemController = viewController as! CanPageItemController if itemController.itemIndex+1 < contentImages.count { return getItemController(itemController.itemIndex+1) } return nil } private func getItemController(itemIndex: Int) -> CanPageItemController? { if itemIndex < contentImages.count { let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("CanItemController") as! CanPageItemController pageItemController.itemIndex = itemIndex pageItemController.imageName = contentImages[itemIndex] return pageItemController } return nil } // MARK: - Page Indicator func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return contentImages.count } func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 } } 

我有两个问题:

  1. 我看不到任何页面指标。 这来自以下代码:

     private func setupPageControl() { let appearance = UIPageControl.appearance() appearance.pageIndicatorTintColor = UIColor.grayColor() appearance.currentPageIndicatorTintColor = UIColor.whiteColor() appearance.backgroundColor = UIColor.darkGrayColor() } 

    有没有一种方法,我可以在故事板中添加页面指示器,并以编程方式引用。 这样,也许我可以添加约束和更多的控制。 我认为页面指示器可能隐藏在标签栏后面。 虽然限制也给我的问题,这导致我的问题2

  2. 正如你可以看到在项目控制器中,我有一个UIImageView和约束都设置正确。 但是,当我运行应用程序的图像出现一秒钟(完全不成比例),然后消失。 即 – 我的约束根本无法正常工作

我的方法总的来说错了吗? 或者是我可以做一些小的改变来解决上述问题。 我一直在关注一个教程(Ray Wenderlich,我认为),它一直运行良好,直到我试图将其与我的标签栏集成。

留下所有以上的事情,只是做如下。

 class CanteenViewController: UIViewController, UIScrollViewDelegate { @IBOutlet var scrHelp: UIScrollView! @IBOutlet var pageControl: UIPageControl! var page = 0 let arrTitle : [String] = ["Title1", "Title2", "Title3", "Title4", "Title5"] let arrImages : [String] = ["Radar-512.png", "dartp.png", "roomp.png", "abnews.png", "canteenp.png"]; override func viewDidLoad() { super.viewDidLoad() //self.edgesForExtendedLayout = UIRectEdge.None self.title = "Canteen" // Do any additional setup after loading the view, typically from a nib. self.createHelpView() pageControl.backgroundColor = UIColor.clearColor() pageControl.pageIndicatorTintColor = UIColor.lightGrayColor() pageControl.currentPageIndicatorTintColor = UIColor(red: 251/255, green: 108/255, blue: 108/255, alpha: 1.0) pageControl.tintAdjustmentMode = UIViewTintAdjustmentMode.Dimmed pageControl.numberOfPages = arrTitle.count pageControl.currentPage = 0 } func createHelpView() { var x = 50 for var i=0; i<arrTitle.count; i++ { var lblTitle = UILabel(frame: CGRectMake(CGFloat(x), 10, CGFloat(scrHelp.frame.width-100), 25)) lblTitle.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin lblTitle.backgroundColor = UIColor.clearColor() lblTitle.font = UIFont.systemFontOfSize(17) lblTitle.textAlignment = NSTextAlignment.Center lblTitle.textColor = UIColor.blackColor() lblTitle.text = arrTitle[i] scrHelp.addSubview(lblTitle) var imgView = UIImageView(frame: CGRectMake(CGFloat(x), 50, CGFloat(scrHelp.frame.width-100), CGFloat(scrHelp.frame.height-150))) imgView.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin imgView.backgroundColor = UIColor.clearColor() imgView.image = UIImage(named: arrImages[i]) imgView.contentMode = UIViewContentMode.ScaleAspectFit scrHelp.addSubview(imgView) x = x + Int(scrHelp.frame.width) } scrHelp.contentSize = CGSizeMake(CGFloat(arrTitle.count)*self.view.frame.width, 0) } func scrollViewDidScroll(scrollView: UIScrollView) { var pageWidth = CGFloat(scrHelp.frame.width) var fractionalPage = scrHelp.contentOffset.x / pageWidth page = lround(CDouble(fractionalPage)) pageControl.currentPage = page } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

最后,添加UIScrollViewUIPageControl给你的storyboard并设置各自的出路。