47

今は黒い背景に白い点です。白い背景の黒い点にしたい場合はどうなりますか?

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0)
{
    return _imageArrays.count;
}// The number of items reflected in the page indicator.
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController NS_AVAILABLE_IOS(6_0)
{
    return self.intCurrentIndex;
}// The selected item reflected in the page indicator.
4

11 に答える 11

130

UIAppearanceUIPageControl の色を変更するために使用できます。AppDelegate のdidFinishLaunchingWithOptions関数でこれを試してください。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIPageControl *pageControl = [UIPageControl appearance];
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
    pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
    pageControl.backgroundColor = [UIColor blueColor];

    return YES;
}

編集:

スタイルを特定のビュー コントローラーにのみ適用するappearanceWhenContainedInには、代わりに次のように使用します。

UIPageControl *pageControl = [UIPageControl appearanceWhenContainedIn:[MyViewController class], nil];

UIPageControlこれで、に含まれるオブジェクトのみMyViewControllerがこのスタイルに適応します。

ありがとうマイク&シンゴー!

編集:UIPageControl画面の下部に 黒い背景が表示される場合は、 UIPageViewControllernotの背景色が原因UIPageControlです。この色は次のように変更できます。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blueColor]; //Set it to whatever you like
}
于 2013-08-23T17:30:41.530 に答える
35

UIPageViewController のページ コントロールを操作できるとは思えません。私の解決策:

UIPageViewControllerDelegate と UIPageViewControllerDataSource である「ルート」UIViewController があります。

このルート ビュー コントローラーには、@property (strong, nonatomic) IBOutlet UIPageControl *pageControl. 対応するストーリーボード nib で、UIPageControl を追加して配置し、[単一ページの非表示] をオンにします。希望があれば色も変えます。

次に、ルート ビュー コントローラーの viewDidLoad に以下を追加します。self.pageControl.numberOfPages = [self.features count]

私のルートView Controllerにも@property (strong, nonatomic) UIPageViewController *pageViewController. そして実装では:

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


self.pageViewController.delegate = self;
DataViewController *startingViewController = [self viewControllerAtIndex:0 storyboard:self.storyboard];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO
                                 completion:NULL];
self.pageViewController.dataSource = self;      
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
self.pageViewController.view.frame = CGRectMake(0.0, 0.0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height + 10.0);
[self.pageViewController didMoveToParentViewController:self];
self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;

(補足: フレームを設定する行により、UIPageViewController のビューの高さが画面サイズを超えて、ネイティブ ページ コントロールが表示されなくなります。私のアプリは縦長のみで、iPhone のみなので、ここで少し簡単に始めました。回転を処理する必要がある場合は、そのネイティブ ページ コントロールを画面外に保持する方法を見つける必要があります。オーバーライドする方法を見つけてください。)

とにかく...次に、追加の UIPageViewController デリゲート メソッドを追加して、新しい非ネイティブ UIPageControl を現在選択されているページに変更します。

- (void)pageViewController:(UIPageViewController *)viewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
  if (!completed){return;}

  // Find index of current page
  DataViewController *currentViewController = (DataViewController *)[self.pageViewController.viewControllers lastObject];
  NSUInteger indexOfCurrentPage = [self indexOfViewController:currentViewController];
  self.pageControl.currentPage = indexOfCurrentPage;
}

私が望むほどきれいではありませんが、このクラスの Apple の API は正確にはエレガンスには向いていません。

于 2013-07-09T02:41:44.770 に答える
7

実際にそれを取得し、デリゲート呼び出しの 1 つで自分のプロパティにローカルに保存できます。

このコードをデリゲート内に配置して、UIPageViewController 内の UIPageControl にアクセスします。

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    [self setupPageControlAppearance];
    return kPageCount;
}

- (void)setupPageControlAppearance
{
    UIPageControl * pageControl = [[self.view.subviews filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(class = %@)", [UIPageControl class]]] lastObject];
    pageControl.pageIndicatorTintColor = [UIColor grayColor];
    pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
}
于 2013-10-11T00:16:28.353 に答える
4

サブビューで再帰的に検索できます

- (void)findAndConfigurePageControlInView:(UIView *)view
{
    for (UIView *subview in view.subviews) {
        if ([subview isKindOfClass:[UIPageControl class]]) {
            UIPageControl * pageControl = (UIPageControl *)subview;
            //customize here
            pageControl.hidesForSinglePage = YES;
            break;
        } else {
            [self findAndConfigurePageControlInView:subview];
        }
    }
}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    [self findAndConfigurePageControlInView:self.view];
    return self.promotionsVCs.count;
}

わたしにはできる

于 2014-04-10T15:42:30.647 に答える
1

UIPageViewController で作った「自動生成」のページインジケーターを使っていると、カスタマイズできないと思います。これを行う唯一の方法は、追加の PageControl を追加することです。これは、Apple が提供するものか、@Maschel が提案したカスタムのものです。

于 2013-07-04T11:29:45.027 に答える
1

外観からカスタマイズ可能です。このようにAppDelegateで行うことができます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   UIPageControl *pageControl = [UIPageControl appearance];
   pageControl.pageIndicatorTintColor = [UIColor whiteColor];
   pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
   pageControl.backgroundColor = [UIColor lightGrayColor];

   return YES;
}

特定のビュー コントローラーに対してのみ実行する場合は、代わりに pageControl をこれに置き換えます。

UIPageControl *pageControl = [UIPageControl appearanceWhenContainedIn:[MyViewController class], nil];
于 2013-11-26T16:58:12.927 に答える