2015-04-23 6 views
2

У меня есть UIPageViewController внутри моего ViewController. У меня есть четыре вида в моем PageViewController. Я хочу, чтобы представление не прокручивалось по первому виду для прокрутки правой стороны и для четвертого вида для прокрутки левой стороны. Как мне это сделать? В принципе мне нужен методы, как (BOOL)scrollViewShouldScroll:Остановить события прокрутки для UIPageViewController

Я попытался с помощью scrollViewDidBeganDragging и установить contentOffset свойство, установите panGestureRecognizer «S включены в false/true но это не остановить прокрутку, но не повезло.

+0

Вы хотите: отключить <== [0] ... [4] === Незнакомый? – Masterfego

+0

Да точно, но это [0] ... [3] но никаких проблем с этим. @Masterfego, как это сделать? – meteors

ответ

0

Я создал два ViewController:

  • RootViewController: где управлять UIPageViewController
  • DataViewcontroller: где я показываю, что я хочу (страница для нас)

    class RootViewController: UIViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource 
    { 
        var pageData:[String] = [] // where I store images names 
    
    } 
    

I дополнить эти 2 метода:

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

    if !viewController.isKindOfClass(DataViewController) // Specify your type 
    { 
    return nil 
    } 

    var index:Int = indexOfViewController(viewController as! DataViewController) 
    if index == 0 
    { 
    return nil 
    } 
    else if index == NSNotFound 
    { 
    return nil 
    } 

    index-- 
    return self.viewControllerAtIndex(index) 

} 

.

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

    if !viewController.isKindOfClass(DataViewController) // Specify your type 
    { 
    return nil 
    } 

    var index:Int = indexOfViewController(viewController as! DataViewController) 
    if index == NSNotFound 
    { 
    return nil 
    } 

    index++ 
    if index == self.pageData.count 
    { 
    return nil 
    }  

    return self.viewControllerAtIndex(index) 
} 

Personnal функции:

func indexOfViewController(viewController: DataViewController) -> Int 
{ 
    return find(pageData, viewController.dataObject)! 
} 

.

func viewControllerAtIndex(index: Int) -> DataViewController! { 
    if pageData.count == 0 || index >= pageData.count { 
    return nil 
    } 

    var dataVC:DataViewController = self.storyboard!.instantiateViewControllerWithIdentifier("DataViewController") as! DataViewController 
    dataVC.dataObject = pageData[index] as String 

    return dataVC 
} 
+0

вы проверили ваш код. Я уже пробовал это, и он не работает. Возврат nil просто прекращает показывать любой контроллер вида, но не останавливает события прокрутки. – meteors

+0

Этот код работает, это на самом деле то, что я использую в приложении, опубликованном в магазине приложений, и даю вам часть моего кода, чтобы дать вам вдохновение. Вы должны сосредоточиться на первых двух методах источника данных: ** func pageViewController (pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? ** и ** func pageViewController (pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController ? ** Вы можете выслать свой код – Masterfego

+0

Что я хочу, когда вы прокручиваете влево на четвертом экране, он ничего не должен делать. Он не должен показывать мне черный экран моего родительского представления. Представление должно оставаться застойным. – meteors

Смежные вопросы