2015-11-11 2 views
0

Я начинаю исследование быстро и использую UIPageViewController для слайда на 3 страницы. Я использую класс:UIPageViewController set limit page

import Foundation 
import UIKit 

class MyPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

var pages = [UIViewController]() 
var pageIndicator : UIPageControl! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.delegate = self 
    self.dataSource = self 

    let page1: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page1") 
    let page2: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page2") 
    let page3: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page3") 

    pages.append(page1) 
    pages.append(page2) 
    pages.append(page3) 


    setViewControllers([page1], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) 
} 
func viewControllerAtIndex(index: Int) -> UINavigationController! { 
    return nil 
} 
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
    let currentIndex = pages.indexOf(viewController)! 
    pageIndicator.currentPage = currentIndex 
    let previousIndex = abs((currentIndex - 1) % pages.count) 

    return pages[previousIndex] 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 
    let currentIndex = pages.indexOf(viewController)! 
    pageIndicator.currentPage = currentIndex 
    let nextIndex = abs((currentIndex + 1) % pages.count) 
    return pages[nextIndex] 
} 

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

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

} 

Но скользящий не останавливается на третьей странице и начинается с первой страницы. Как переместить слайд-страницу вперед и назад?

ответ

1

Я думаю, что ваш расчет индекса неправильно в следующей строке. `

let nextIndex = abs((currentIndex + 1) % pages.count) 
return pages[nextIndex]` 

для последнего контроллера представления currentIndex = 2, то NEXTINDEX = (2 + 1)% 3 = 0. Итак, вы снова возвращаете контроллер вида в индекс 0.

добавьте следующую строку в метод `

if(currentIndex == (pages.count-1)) 
    { 
     return nil; 
    } 

` Примечание: это в соответствии с объективной с.

+0

Спасибо! Код для следующей страницы: 'если currentIndex == (pages.count-1) { возврат ноль }' – user2823991

+0

Предыдущая страница: 'если currentIndex == 0 { возврат ноль }' – user2823991

+0

его работать правильно ... – UIBittu

0

Это решение. Вам не нужно иметь полный набор сложного кода для выполнения того, что вам нужно. Создайте ScrollView. Задайте ширину его содержимого как кратную количеству страниц.

Попробуйте этот код. это может помочь Вам

override func viewDidLoad() { 
    super.viewDidLoad() 

    let screensize = UIScreen.mainScreen().bounds 

    pagescroll.frame = CGRectMake(0, 0,screensize.width, screensize.height) 
    pagescroll.contentSize = CGSize(width: screensize.width*3, height: screensize.height) 
    pagescroll.pagingEnabled = true 

    page1.frame = CGRectMake(0, 0, screensize.width, screensize.height) 
    page2.frame = CGRectMake(screensize.width, 0, screensize.width, screensize.height) 
    page3.frame = CGRectMake(screensize.width*2, 0, screensize.width, screensize.height) 

    pagescroll.addSubview(page1) 
    pagescroll.addSubview(page2) 
    pagescroll.addSubview(page2) 
    self.view.addSubview(pagescroll) 


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


var pagescroll = UIScrollView() 
var page1 = UIView() 
var page2 = UIView() 
var page3 = UIView() 

Вы также можете добавить PageController: UIPageControl согласно вашему требованию

0

Как уже указывал UIBittu: ваш расчет нуждается в исправлении.

возможный (возможно, более читаемым) решение может выглядеть следующим образом:

func indexOfViewController(viewController: UIViewController) -> Int { 
    guard let index = pages.indexOf(viewController) else { 
     return NSNotFound 
    } 

    return index 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
    var index = indexOfViewController(viewController) 

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

    index-- 

    return pages[index] 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 
    var index = indexOfViewController(viewController) 

    if (index == NSNotFound) || (index+1 == pages.count) { 
     return nil 
    } 

    index++ 

    return pages[index] 
}