UIPageControl 似乎并不总是在滚动时发生变化

Posted

技术标签:

【中文标题】UIPageControl 似乎并不总是在滚动时发生变化【英文标题】:UIPageControl does not appear to always change upon scroll 【发布时间】:2016-02-21 12:14:02 【问题描述】:

我有一个 UIPageViewController,我在其中放置了一个 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

【问题讨论】:

查看这个方法。pageViewController:(UIPageViewController * )pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed 【参考方案1】:

了解 UIPageViewControl 的要点可能是使用 int 跟踪您所在的页面不起作用。永远不会工作。试图让它发挥作用会让你发疯。

给定一个视图控制器,您必须每次都通过将其与您拥有的索引进行比较来获取索引。

如果您阅读 Apple 示例代码,您会看到这一点。这真的很令人困惑,而且从各方面来说,这是 Cocoa 中较弱的组件之一。

解决方案:假设您有一个页面控件,并且您有 5 个不同的控制器正在分页。当框架请求之前或之后的控制器时,它会将当前控制器传递给您。您应该使用它并循环遍历您必须在集合中找到当前索引的索引,然后只需添加或减去一个(之后/之前)并返回该索引处的控制器。就这么简单。

这样做的部分原因是您可能不想为每个页面使用不同的控制器。例如,您可能拥有相同的控制器,只是将不同的东西粘贴到其中。在这种情况下,您可以继续更改单个组件中的子组件,然后在更改其内容后返回相同的组件。

【讨论】:

那你有什么推荐的? 问题是我只有 1 个 viewContoller,内容只是改变 是的,我现在看到了。尽管如此,这个答案仍然是解决方案。假设您的演练是一堆帖子(一个包含您正在显示的字段的类)。鉴于传递给您的当前控制器,您需要有一种方法来判断您在哪个帖子上。时期。这就是答案。例如,假设您的控制器有一个 currentPostId。你可以把它从那里拉下来,然后遍历你的帖子(或使用 NSPredicate)并找到具有该 id 的帖子,然后返回前一个或下一个。

以上是关于UIPageControl 似乎并不总是在滚动时发生变化的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 中的文本并不总是被绘制

iOS 11 |手机| JavaScript |触摸事件并不总是触发

在 iOS 中为 UIPageControl 添加约束时 UIScrollView 不滚动

如何连接 UIPageControl 使其与其他控件一起向上滚动?

UITableView 上的水平滚动正在改变 UIPageControl 的位置,该 UIPageControl 附加到 TableView 单元格内的滚动视图

AppBarLayout 并不总是在向下滚动时重新输入