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 似乎并不总是在滚动时发生变化的主要内容,如果未能解决你的问题,请参考以下文章
iOS 11 |手机| JavaScript |触摸事件并不总是触发
在 iOS 中为 UIPageControl 添加约束时 UIScrollView 不滚动
如何连接 UIPageControl 使其与其他控件一起向上滚动?
UITableView 上的水平滚动正在改变 UIPageControl 的位置,该 UIPageControl 附加到 TableView 单元格内的滚动视图