2016-02-21 4 views
0

У меня есть UIPageViewController, где я разместил UIPageControl. Кажется, что он работает большую часть времени, когда я прокручиваю, однако иногда он не меняет текущую выбранную страницу. Что может вызвать такое поведение?UIPageControl не всегда меняется при прокрутке

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

    let vc = viewController as! WalkthroughViewController 

    var index = vc.pageIndex as Int 

    self.pageControl.currentPage = index 

    if (index == 0 || index == NSNotFound) 

    { 

     return nil 



    } 



    index-- 

    return self.viewControllerAtIndex(index) 
} 

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

    let vc = viewController as! WalkthroughViewController 

    var index = vc.pageIndex as Int 

    self.pageControl.currentPage = index 


    if (index == NSNotFound) 

    { 

     return nil 

    } 



    index++ 



    if (index == self.pageTitles.count) 

    { 

     return nil 

    } 



    return self.viewControllerAtIndex(index) 
} 

func viewControllerAtIndex(index: NSInteger) -> UIViewController? { 

    if ((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) { 

     return WalkthroughViewController() 

    } 


    let pageContentViewController = storyboard!.instantiateViewControllerWithIdentifier("WalkthroughViewController") as! WalkthroughViewController 
    pageContentViewController.titleText = pageTitles[index] as String 
    pageContentViewController.subText = pageSubTitles[index] as String 
    pageContentViewController.imageText = pageImages[index] as String 
    pageContentViewController.pageIndex = index 

    return pageContentViewController 
} 
+0

проверить это method.pageViewController: (UIPageViewController *) pageViewController didFinishAnimating: (BOOL) закончил previousViewControllers: (NSArray *) previousViewControllers transitionCompleted: (BOOL) завершенные – sateesh

ответ

0

Вероятно, главное, чтобы узнать о том, что UIPageViewControl отслеживания, какие страницы вы на с ИНТ не работает. Никогда не сработает. Попытка заставить его работать сделает вас сумасшедшим.

Учитывая контроллер вида, вы должны каждый раз получать индекс, сравнивая его с теми, которые у вас есть.

Если вы читаете образец кода Apple, вы увидите это. Это действительно сбивает с толку, и это, по общему мнению, один из слабых компонентов какао.

Решение: допустим, у вас есть элемент управления страницей, и у вас есть 5 разных контроллеров, через которые вы просматриваете страницы. Когда инфраструктура запрашивает контроллер до или после, он передает вам текущий контроллер. Вы должны взять это и пропустить через те, которые вам нужно найти, указатель текущего в вашей коллекции, а затем просто добавить или вычесть один (после/до) и вернуть контроллер по этому индексу. Так просто.

Часть причины, по которой это делается, заключается в том, что вы можете не иметь другого контроллера для каждой страницы. Например, у вас может быть тот же контроллер, что вы просто вставляете разные вещи. В этом случае вы можете просто изменять подкомпоненты в одном компоненте, а затем возвращать тот же компонент после изменения его содержимого.

+0

Так что вы посоветуете? –

+0

Проблема в том, что у меня только 1 viewContoller, где содержимое просто меняется –

+0

Да, я вижу это сейчас. Тем не менее, этот ответ содержит решение. Предположим, что ваше пошаговое руководство представляет собой кучу сообщений (класс с полями, которые вы показываете). У вас должен быть способ сообщить, в какую должность вы находитесь, учитывая текущий контроллер, который был передан вам. Период. Это ответ. Итак, скажем, например, что у вашего контроллера есть currrentPostId. Вы бы оттянули это оттуда, затем прокрутите свои сообщения (или используйте NSPredicate) и найдите тот, у кого есть этот идентификатор, затем верните либо предыдущий, либо следующий. – Rob

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