2013-12-23 8 views
45

私はかなり簡単なことをしたいと思います。すべての点とUIPageViewControllerの下部にあるバーを削除してください。UIPageViewControllerからドットを隠す

これはセットアップです:

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]; 

どのように私はドットを削除するには上の任意のアイデア:私は、私はこのようにそれを表示するUIPageViewController * PageControllerで を持つカスタムビューコントローラを持っていますか?データソースは、これらのメソッドを実装している場合

+0

から呼び出さなければなりません。どのように彼らはページを切り替える必要があることを知っているでしょうか。実際には、現在は多数のWebサイトでも使用されています。各ページが自動的に変化すると、ドットが変化します。 – logixologist

+0

私はそれを理解しており、アップルのガイドラインに従って私のアプリのほとんどをやっていますが、これはちょうどナビゲーションの第二の方法であり、アイテムがたくさんあるのでドットを持たないことを好みます。 –

答えて

174

ページ制御のみが表示されます。

presentationCountForPageViewController: 
presentationIndexForPageViewController: 

単にこれらの実装を削除し、ページのコントロールが表示されません。 the datasource docsから:「ページインジケータを支える」のメソッドの両方が実装され、ページビューコントローラの遷移スタイルはUIPageViewControllerTransitionStyleScrollある

場合は、ページインジケータが表示されます。唯一の1ページが含まれているそのうちのいくつかは、 - 私の状況では

+0

受け入れられる回答である必要があります。 –

+0

ありがとう、これははるかに良い答えのように見えます。うまく動作します! –

+0

素晴らしいです。私の時間を節約しました。ありがとうございました:) – macpandit

9

は、私は([のUITableView didSelectRowAtIndexPath]から作成された)複数のUIPageViewControllersを持っています。代わりに異なるのUITableViewの行に対して異なるコントローラを使用して、私は次のようにUIPageViewControllerのデリゲートメソッドを実装し:

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

UIPageViewControllerは、ドットを表示しない作るようですだけ1ページがある場合、これは0を返します。それは厄介ですが、うまくいくようです(iOS SDK 7.0)。

1ページしか持たないUIPageControllerの場合、実行時にメソッドを削除するのが「クリーン」な方法があると思いますが、これにはいくつかの複雑なobjCランタイム操作が必要です。

このアプローチについてのコメントはありますか?

+0

質問をする場合は、答えに入れないでください。 しかし、新しいスレッドを開始してください。 このページの右上に「質問する」ボタンがあります。 多くの人があなたの質問を見て、そのように答えようとします。 – sth

+1

@sth私はStack Overflowに頻繁に寄稿しているわけではないので、あなたのコメントを感謝します。ここで優先するプロトコルは何ですか?私はOPの質問に対する回答を提供したので、その部分を回答として提出することを前提としています。しかし私は私の質問が元の質問の文脈の外ではほとんど意味がないと信じています。自分のアプローチについてのコメントを求めるために新しいスレッドを開始することを提案していますか?おそらく、私はコメントを求めてはいけませんでしたか? – mts

+0

UIPageControlを設定して、1ページしかない場合は自動的にドットを非表示にすることができます。 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 
} 
関連する問題