2013-12-23 71 views
45

我想做一個非常簡單的事情。只需刪除UIPageViewController底部的所有點和條。從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]; 

對我怎麼刪除圓點任何想法?

+0

這是一個蘋果的標誌性特徵,大多數用戶都希望看到被調用。他們如何知道他們需要切換頁面呢?實際上,現在也被一些網站使用。隨着每個頁面自動更改點的變化。 – logixologist

+0

據我所知,我根據蘋果的指導方針正在做我的大部分應用程序,但這只是第二種導航方式,而且還有一堆項目,所以我寧願沒有點。 –

回答

174

頁面控件,如果數據源實現了這些方法時,纔會顯示:

presentationCountForPageViewController: 
presentationIndexForPageViewController: 

只需刪除您的這些實現,頁面的控制將不顯示。從the datasource docs

如果雙方的「支持頁面指示燈」的方法來實現,並在頁面視圖控制器的過渡風格UIPageViewControllerTransitionStyleScroll,頁面指示器是可見的。

+0

應該是被接受的答案。 –

+0

謝謝,這看起來像一個更好的答案。工作得很好! –

+0

真棒..你節省了我的時間..謝謝你:) – macpandit

9

在我的情況我有多個UIPageViewControllers(創建自 - [UITableView didSelectRowAtIndexPath]),其中一些只包含1頁。除了使用不同的控制器對不同的UITableView行,我實現了UIPageViewController委託方法如下:

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

這將返回0,如果只有1頁,這似乎使UIPageViewController不顯示的點。這是一個混亂,但它似乎工作(iOS SDK 7.0)。

我想一個「更簡潔」的方法是在運行時爲那些只有1頁的UIPageController移除方法,但這會涉及一些奇特的objC運行時操作。

對此方法的評論?

+0

如果你想問一個問題,不要把它放在回答 ,但開始一個新的線程。 「Ask Question」按鈕位於此頁面的右上角。 更多人會看到你的問題,並試圖回答這個問題。 – sth

+1

@sth我感謝您的評論,因爲我不是Stack Overflow的常見貢獻者。這裏的首選協議是什麼?我爲OP的問題提供了一個答案,所以我認爲應該提交該部分作爲答案。但我相信我的問題在原始問題的背景之外毫無意義。你是否建議我開始一個新的主題,以便對我的方法徵求意見?也許我不應該徵求意見? – mts

+0

如果只有一個頁面,您可以配置UIPageControl自動隱藏點。在Swift中:'let pageControl = UIPageControl.appearance(); pageControl.hidesForSinglePage = true'。 – user2067021

2

如果你想在運行時動態隱藏這些點,則返回-1從presentationIndexForPageViewController代表:

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return yourPageVCs.count 
} 

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return yourPageVCs.count > 1 ? 0 : -1 
} 

在這種情況下,如果你只有1(單面)頁面,點將會被隱藏。

+0

這個效果很好,當頁數不會動態改變 –

+0

,我該如何在運行時改變它? – swalkner

-1

上述修復程序在開始時以固定頁數工作正常。

我嘗試了不同的方法來解決頁面可以被動態增加或減少的問題

所以我用下面的方法手動隱藏組件本身。

func togglePageControl(pageCount: Int, threshold: Int = 1) { 

    var hidden = true 

    if pageCount > threshold { 

     hidden = false 

    } 

    for subView in self.view.subviews { 
     if subView is UIScrollView { 
      subView.frame = self.view.bounds 
     } else if subView is UIPageControl { 
      subView.isHidden = hidden 
     } 
    } 
} 

,這應該從

public func presentationCount(for pageViewController: UIPageViewController) -> Int { 

    togglePageControl(pageCount: pages.count) 

    // or togglePageControl(pageCount: pages.count, threshold: 5) 

    return pages.count 
}