2016-08-03 2 views
1

UITableViewHeaderにpage controllerを追加することは可能ですか?UITableViewヘッダー内のページコントロール。 swift

enter image description here

黄色、青色、テーブルビューヘッダでは、テーブル図です。私tableViewHeader以下

:UIViewの():

lazy var resultLabel : UILabel = { 
    let label = UILabel() 
    return label 
}()  
lazy var pageControl = UIPageControl() 
    lazy var pageIndex: Int = 0 

override init(frame: CGRect) { 
     super.init(frame: frame) 
     self.addSubview(resultLabel) 
     configurePageControl() 
     setUpConstraints() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func setUpConstraints() { 
     resultLabel.snp_makeConstraints { 
      $0.center.equalTo(snp_center) 
     } 
     pageControl.snp_makeConstraints { 
      $0.top.equalTo(snp_top).offset(20) 
      $0.left.equalTo(resultLabel.snp_right).offset(0) 
     } 
    } 

    func configurePageControl() { 
     self.pageControl.numberOfPages = 3 
     self.pageControl.currentPage = pageIndex 
     self.pageControl.tintColor = UIColor.redColor() 
     self.pageControl.pageIndicatorTintColor = UIColor.blackColor() 
     self.pageControl.currentPageIndicatorTintColor = UIColor.lightGrayColor() 
     self.addSubview(pageControl) 
    } 

と処理されますここに私のビューコントローラ。

class NewsResultsViewController: UIPageViewController, UIPageViewControllerDataSource { 
    var results: NSArray = NSArray() 

    override init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation: UIPageViewControllerNavigationOrientation, options: [String : AnyObject]?) { 
     super.init(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: options) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     results = ["0:2", "2:1", "0:0"] 

     self.dataSource = self 

     self.setViewControllers([getViewControllerAtIndex(0)], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) 
    } 

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

     let pageContent: NewsHeaderView = viewController as! NewsHeaderView 

     var index = pageContent.pageIndex 

     if ((index == 0) || (index == NSNotFound)) 
     { 
      return nil 
     } 

     index -= 1; 

     return getViewControllerAtIndex(index) 
    } 

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

     let pageContent: NewsHeaderView = viewController as! NewsHeaderView 

     var index = pageContent.pageIndex 

     if (index == NSNotFound) 
     { 
      return nil; 
     } 

     index += 1; 

     if (index == results.count) 
     { 
      return nil; 
     } 


     return getViewControllerAtIndex(index) 
    } 

    func getViewControllerAtIndex(index: NSInteger) -> NewsTableViewController { 
     let getStartedPageContentViewController = NewsHeaderView() 

     getStartedPageContentViewController.pageIndex = index 
     getStartedPageContentViewController.resultLabel.text = "\(results[index])" 

     return getStartedPageContentViewController 
    } 

} 

実際には多少の誤差があります。私はテーブルビューヘッダーを通過できません(ビューコントローラーを通過できます)。どんな助け?おかげ

+0

をあなたはストーリーボードを使用している場合は、単にヘッダビューにUIPageControlを入れて、ヘッダにIBOutletsを接続します

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return 3 } // Enables pagination dots 

を設定することを忘れないでください。 VCのheaderViewにIBOutletも作成し、メソッドを公開してページインデックスを変更します。 –

+0

ストーリーボードを使用していないIm:\ –

答えて

0

はちょうどあなたのコードにこの機能を置く:

dataSource = self 

    delegate = self 
関連する問題