隐藏UIPageViewController中的点

Ste*_*tic 55 cocoa-touch uipagecontrol ios uipageviewcontroller ios7

我想做一件非常简单的事情.只需删除所有点,以及UIPageViewController底部的栏.

这是设置:我有一个自定义视图控制器,它有UIPageViewController*pageController我显示如下:

self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

self.pageController.dataSource = self;
[[self.pageController view] setFrame:[self.view bounds]];

BSItemPageViewController *initialViewController = [self viewControllerAtIndex:selectedIndex];

NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];

[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

关于如何删除点的任何想法?

jrt*_*ton 200

仅当数据源实现这些方法时,才会显示页面控件:

presentationCountForPageViewController:
presentationIndexForPageViewController:
Run Code Online (Sandbox Code Playgroud)

只需删除这些实现,就不会显示页面控件.从数据源文档:

如果实现了"支持页面指示符"中的两个方法,并且页面视图控制器的转换样式为UIPageViewControllerTransitionStyleScroll,则页面指示符可见.

  • 如果你需要画外音来读出页码(5个中的1个,2个中的2个等),那么这个解决方案不起作用.否则,没关系. (4认同)
  • 我添加了一个解决方案来解决@Lee 提到的可访问性问题。本质上,只需调用 UIPageControl.appearance().isHidden = true (Swift 解决方案)。 (2认同)

mts*_*mts 11

在我的情况下,我有多个UIPageViewControllers(从 - [UITableView didSelectRowAtIndexPath]创建),其中一些只包含1页.我没有为不同的UITableView行使用不同的控制器,而是按如下方式实现了UIPageViewController委托方法:

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
    return ([self numberOfPages] == 1 ? 0 : [self numberOfPages]);
}
Run Code Online (Sandbox Code Playgroud)

如果只有1页似乎使UIPageViewController不显示点,则返回0.它是一个kludge但它似乎工作(iOS SDK 7.0).

我想一种"更干净"的方法是在运行时为那些只有1页的UIPageControllers删除方法,但这会涉及一些花哨的objC运行时操作.

对这种方法的评论?

  • 如果只有一个页面,您可以将 UIPageControl 配置为自动隐藏点。在 Swift 中:`let pageControl = UIPageControl.appearance(); pageControl.hidesForSinglePage = true`。 (3认同)
  • @sth 我感谢您的评论,因为我不是 Stack Overflow 的频繁贡献者。这里的首选协议是什么?我提供了 OP 问题的答案,因此我认为该部分应作为答案提交。但我相信我的问题在原始问题的上下文之外毫无意义。您是否建议我开始一个新线程以征求对我的方法的评论?也许我不应该征求意见? (2认同)