在某些页面索引上隐藏UIPageControlViewController的UIPageControl

时间:2014-11-18 23:56:08

标签: ios objective-c cocoa-touch uipageviewcontroller uipagecontrol

我想隐藏某个VC上的页面控制指示符,而是显示一个带有文本“开始”的按钮。然而,用户仍然能够导航回页面控件。

我试过这个:

self.pageController = [UIPageControl appearance];
self.pageController.pageIndicatorTintColor = [UIColor redColor];
self.pageController.currentPageIndicatorTintColor = [UIColor greenColor];

if(self.pageIndex == 1){
    self.pageController.hidden = YES;
    NSLog(@"hide you!");
}

然而,这不起作用。在没有if语句的情况下设置self.pageController.hidden = YES,也会触发nslog。看来这只能设置一次。

我也不知道这会有多顺利。当用户完全到达页面本身时,我显然不希望它改变,但是在转向它时。

解决此问题的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

我用swift做了,也许会有所帮助 -

func setPageControlHidden (hidden: Bool)
{
    for subView in self.view.subviews
    {
        if subView is UIScrollView
        {
            subView.frame = self.view.bounds
        }
        else if subView is UIPageControl
        {
            subView.hidden = hidden
        }
    }
}

答案 1 :(得分:0)

我猜您可以将hidesForSinglePage设置为YES,当numberOfPages大于1时,这将重置隐藏属性。

答案 2 :(得分:0)

如果您想使用UIPageControl所在的空间,您可以更改视图的框架,以便页面控制不在屏幕上:

func togglePageControl(visible: Bool) {
    if let pageVC = parent as? UIPageViewController {
        // find UIPageControl
        for case let control in pageVC.view.subviews where control is UIPageControl {
            let height = control.frame.height
            if visible {
                pageVC.view.frame.size.height -= height
            } else {
                pageVC.view.frame.size.height += height
            }
            break
        }
    }
}

在你希望使用隐藏页面控件的UIViewController中使用它(检查可见性是因为即使用户开始滑动到其他屏幕然后中断此操作,也会调用viewWillAppear):

var isPageControlVisible = true

override func viewWillAppear(_ animated: Bool) {
    if isPageControlVisible {
        togglePageControl(visible: false)
        isPageControlVisible = false
    }
}

override func viewDidDisappear(_ animated: Bool) {
    togglePageControl(visible: true)
    isPageControlVisible = true
}

答案 3 :(得分:-1)

class MyPageViewController: UIPageViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        for subView in self.view.subviews where subView is UIPageControl {
            subView.isHidden = true
        }
    }
}