Swift滑动导航表视图

我试图在swift中执行不同的tableViewControllers之间的滑动导航。 我设法与viewControllers与下面的代码:

import UIKit class ViewController: UIViewController { @IBOutlet weak var scrollView: UIScrollView! override func viewDidLoad() { super.viewDidLoad() } var scrollViewAdded = false override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if !scrollViewAdded { self.loadSrollView() self.scrollViewAdded = true } } func loadSrollView() { self.scrollView.pagingEnabled = true let vc0 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController0") self.addChildViewController(vc0!) self.scrollView.addSubview(vc0!.view) vc0!.didMoveToParentViewController(self) let vc1 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController1") var frame1 = vc1!.view.frame frame1.origin.x = self.view.frame.size.width vc1!.view.frame = frame1 self.addChildViewController(vc1!) self.scrollView.addSubview(vc1!.view) vc1!.didMoveToParentViewController(self) let vc2 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController2") var frame2 = vc2!.view.frame frame2.origin.x = self.view.frame.size.width * 2 vc2!.view.frame = frame2 self.addChildViewController(vc2!) self.scrollView.addSubview(vc2!.view) vc2!.didMoveToParentViewController(self) let vc3 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController3") var frame3 = vc3!.view.frame frame3.origin.x = self.view.frame.size.width * 3 vc3!.view.frame = frame3 self.addChildViewController(vc3!) self.scrollView.addSubview(vc3!.view) vc3!.didMoveToParentViewController(self) self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 4, self.view.frame.size.height - 66) } } 

我认为我可以通过用tableviewcontrollersreplaceviewcontrollers来适应它,但它不起作用。 任何人都知道如何做到这一点?

以下是在项目中使用XLPagerTabStrip库的步骤:

步骤1:在Storyboard上拖动一个VC(Suppliedly Intial VC)并在该VC上拖动一个Container View(完全占用VC)。 拖动另一个空的VC(将其类定义为将在下一步创build的“myPagerStrip”)。 现在控制从容器视图拖动,并selectembedded和定义此Storyboard Embed segue的标识符为“showMyPagerStrip”

第2步:使用以下代码创build一个名为“myPagerStrip.swift”的新Swift文件: –

注意:下面的代码有任何疑问,请参阅上面已经提到的github链接,这里的一切都有解释。

 import XLPagerTabStrip class myPagerStrip: ButtonBarPagerTabStripViewController { override func viewDidLoad() { settings.style.buttonBarBackgroundColor = UIColor.yellowColor() // selected bar view is created programmatically so it's important to set up the following 2 properties properly settings.style.selectedBarBackgroundColor = UIColor.blackColor() //settings.style.selectedBarHeight: CGFloat = 5 // each buttonBar item is a UICollectionView cell of type ButtonBarViewCell settings.style.buttonBarItemBackgroundColor = UIColor.redColor() settings.style.buttonBarItemFont = UIFont.systemFontOfSize(18) // helps to determine the cell width, it represent the space before and after the title label // settings.style.buttonBarItemLeftRightMargin: CGFloat = 8 settings.style.buttonBarItemTitleColor = UIColor.whiteColor() // in case the barView items do not fill the screen width this property stretch the cells to fill the screen settings.style.buttonBarItemsShouldFillAvailiableWidth = true changeCurrentIndexProgressive = { (oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) -> Void in guard changeCurrentIndex == true else { return } oldCell?.label.textColor = UIColor(white: 1, alpha: 0.6) newCell?.label.textColor = .whiteColor() if animated { UIView.animateWithDuration(0.1, animations: { () -> Void in newCell?.transform = CGAffineTransformMakeScale(1.0, 1.0) oldCell?.transform = CGAffineTransformMakeScale(0.8, 0.8) }) } else { newCell?.transform = CGAffineTransformMakeScale(1.0, 1.0) oldCell?.transform = CGAffineTransformMakeScale(0.8, 0.8) } } super.viewDidLoad() } override func viewControllersForPagerTabStrip(pagerTabStripController: PagerTabStripViewController) -> [UIViewController] { let child_1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("tableViewOne") // First Table View let child_2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("tableViewTwo") // Second Table View let child_3 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("tableViewThree") // Third Table View let childVC = [child_1,child_2, child_3] return childVC } override func reloadPagerTabStripView() { super.reloadPagerTabStripView() } } 

步骤3:在Storyboard上拖动3个VC,创build3个Cocoa Class文件,分别为tableViewOne.swift,tableViewTwo.swift和tableViewThree.swift,其中Storyboard ID为“tableViewOne”,“tableViewTwo”,“tableViewThree”。代码为child_1,child_2和child_3)

注意:假设所有3个tableViews或者所需的tableView都被设置为所需的数据。

步骤4:inheritance每个tableView中的“IndicatorInfoProvider”(在步骤5之后执行),即

 class tableViewOne: UIViewController,IndicatorInfoProvider 

第5步:在每个文件中导入XLPagerTabStrip,并在每个tableView中添加以下function: –

 func indicatorInfoForPagerTabStrip(pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { return IndicatorInfo(title: "My Child title 1") } 

现在,你已经完成了。 只需在模拟器或实际设备中运行项目:)

如果遇到table views问题,下面是tableViewOne.swift的代码供参考:

 import UIKit import XLPagerTabStrip class tableViewOne: UIViewController,IndicatorInfoProvider { @IBOutlet var tableView: UITableView! var dummyData = ["data 0","data 001","data try"] override func viewDidLoad() { super.viewDidLoad() } func indicatorInfoForPagerTabStrip(pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { return IndicatorInfo(title: "My Child title 1") } } extension tableViewOne: UITableViewDataSource, UITableViewDelegate { func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return dummyData.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell cell.textLabel!.text = dummyData[indexPath.row] return cell; } }