2015-10-29 2 views
1

Я пытаюсь разработать учебник в Swift. У меня есть контроллер просмотра страниц, который работает с индикаторами (http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/), но я хочу добавить кнопку, чтобы перейти на следующую страницу, щелкнув ее, а не прокручивая экран (TODO NextPage).UIPageViewController next button

import UIKit 

class TutorialViewController: UIViewController, UIPageViewControllerDataSource { 

var pageViewController: UIPageViewController! 
var pageTexts: NSArray! 
var pageImages: NSArray! 
var index: Int = 0 

@IBOutlet var button: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.pageTexts = NSArray(objects: "Explore", "Today Widget") 
    self.pageImages = NSArray(objects: "background1.jpg", "background2.jpg") 

    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController 

    self.pageViewController.dataSource = self 

    let startVC = self.viewControllerAtIndex(index) as TutorialContentViewController 
    let viewControllers = NSArray(object: startVC) 

    self.pageViewController.setViewControllers(viewControllers as! [UIViewController], direction: .Forward, animated: true, completion: nil) 
    self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.size.height - 60) 

    self.addChildViewController(self.pageViewController) 
    self.view.addSubview(self.pageViewController.view) 
    self.pageViewController.didMoveToParentViewController(self) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func viewControllerAtIndex(index: Int) -> TutorialContentViewController { 
    if (index >= self.pageTexts.count) { 
     return TutorialContentViewController() 
    } 

    let vc: TutorialContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("TutorialContentViewController") as! TutorialContentViewController 

    vc.image = self.pageImages[index] as! String 
    vc.text = self.pageTexts[index] as! String 
    vc.pageIndex = index 
    self.index = index 

    self.button.setTitle(self.index == self.pageTexts.count - 1 ? "Finish" : "Next", forState: .Normal) 

    return vc 
} 


// MARK: - Page View Controller Data Source 
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
    let vc = viewController as! TutorialContentViewController 
    let index = vc.pageIndex as Int 

    return self.viewControllerAtIndex(index) 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 
    let vc = viewController as! TutorialContentViewController 
    var index = vc.pageIndex as Int 

    if (index == NSNotFound) { 
     return nil 
    } 

    index++ 
    if (index == self.pageTexts.count) { 
     self.button.setTitle("Finish", forState: .Normal) 
     return nil 
    } else { 
     self.button.setTitle("Next", forState: .Normal) 
    } 
    return self.viewControllerAtIndex(index) 
} 

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return self.pageTexts.count 
} 

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return 0 
} 

@IBAction func onButtonClick(sender: AnyObject) { 
    if (self.index == self.pageTexts.count - 1) { 
     let vc : UIViewController = self.storyboard!.instantiateViewControllerWithIdentifier("splashViewController") 
     vc.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve 
     self.presentViewController(vc, animated: true, completion:nil) 
    } else { 
     //TODO NextPage 
    } 
} 

}

+0

http://stackoverflow.com/questions/7208871/это-это возможно, к повороту-страницы программно-в-uipageviewcontro ller/39190174? noredirect = 1 # comment65723601_39190174 Последний ответ может быть полезным –

ответ

1

Вы можете использовать:

На следующей странице

@IBAction func onButtonNextClick(sender: object) { 
    pageViewController.setViewControllers(viewControllers, 
                direction: UIPageViewControllerNavigationDirection.Forward, 
                animated: true, 
                completion: nil) 
} 

Для предыдущей странице

@IBAction func onButtonPreviousClick(sender: object) { 
    pageViewController.setViewControllers(viewControllers, 
                direction: UIPageViewControllerNavigationDirection.Reverse, 
                animated: true, 
                completion: nil) 
} 
+0

Как вы определяете viewControllers? – Yamila

+0

Какой из них вы определили здесь 'let startVC = self.viewControllerAtIndex (index) as TutorialContentViewController let viewControllers = NSArray (object: startVC)'. Вы должны создать для него свойство. – anhtu

+0

Он переходит на следующую страницу, но не обновляет индикатор круглой страницы, а затем все страницы являются текущей страницей (всегда вторая страница) – Yamila