Je suis novice dans la programmation iPhone, j'essaie de développer une application qui utilise le contrôle de page. La couleur d'arrière-plan de ma vue est blanche et les contrôleurs de page par défaut sont également blancs, ce qui rend le contrôle de page invisible dans ma vue, j'ai donc changé la couleur de fond du contrôle de page pour qu'elle soit visible. Maintenant, la vue semble corrigée et mauvaise. Existe-t-il un moyen de modifier uniquement la couleur des points pour le contrôle de la page?
Merci d'avance
Nous avons personnalisé l'UIPageControl pour utiliser une image personnalisée pour l'indicateur de page, j'ai énuméré les tripes de la classe ci-dessous ...
GrayPageControl.h
@interface GrayPageControl : UIPageControl
{
UIImage* activeImage;
UIImage* inactiveImage;
}
GrayPageControl.m
-(id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
activeImage = [[UIImage imageNamed:@"active_page_image.png"] retain];
inactiveImage = [[UIImage imageNamed:@"inactive_page_image.png"] retain];
return self;
}
-(void) updateDots
{
for (int i = 0; i < [self.subviews count]; i++)
{
UIImageView* dot = [self.subviews objectAtIndex:i];
if (i == self.currentPage) dot.image = activeImage;
else dot.image = inactiveImage;
}
}
-(void) setCurrentPage:(NSInteger)page
{
[super setCurrentPage:page];
[self updateDots];
}
Ensuite, dans le contrôleur de vue, nous l'utilisons simplement comme un UIPageControl normal
IBOutlet GrayPageControl* PageIndicator;
Modifier:
Dans le contrôleur de vue qui a le GrayPageControl, j'ai une IBAction qui est liée à l'événement GrayPageControl.ValueChanged.
-(IBAction) pageChanged:(id)sender
{
int page = PageIndicator.currentPage;
// update the scroll view to the appropriate page
CGRect frame = ImagesScroller.frame;
frame.Origin.x = frame.size.width * page;
frame.Origin.y = 0;
[ImagesScroller scrollRectToVisible:frame animated:YES];
}
L'application se bloque dans iOS7. J'ai une solution pour iOS 7:
Raison du crash:
dans iOS 7 [self.subViews objectAtIndex: i]
renvoie UIView
Au lieu de UIImageView
et setImage
n'est pas la propriété de UIView
et l'application se bloque. Je résous mon problème en utilisant ce code suivant.
Vérifiez si la sous-vue est UIView
(pour iOS7) ou UIImageView
(pour iOS6 ou version antérieure). Et si c'est UIView
je vais ajouter UIImageView
comme sous-vue sur cette vue et le tour est joué et ne plante pas .. !!
-(void) updateDots
{
for (int i = 0; i < [self.subviews count]; i++)
{
UIImageView * dot = [self imageViewForSubview: [self.subviews objectAtIndex: i]];
if (i == self.currentPage) dot.image = activeImage;
else dot.image = inactiveImage;
}
}
- (UIImageView *) imageViewForSubview: (UIView *) view
{
UIImageView * dot = nil;
if ([view isKindOfClass: [UIView class]])
{
for (UIView* subview in view.subviews)
{
if ([subview isKindOfClass:[UIImageView class]])
{
dot = (UIImageView *)subview;
break;
}
}
if (dot == nil)
{
dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, view.frame.size.width, view.frame.size.height)];
[view addSubview:dot];
}
}
else
{
dot = (UIImageView *) view;
}
return dot;
}
J'espère que cela résoudra également votre problème pour iOS7. et si Anypone trouve la solution optimale pour cela, veuillez commenter. :)
Codage heureux
La réponse JWD est la voie à suivre. Cependant, si tout ce que vous voulez, c'est simplement changer la couleur, pourquoi ne pas le faire:
Cette technique ne fonctionnera que sur iOS6.0 et supérieur!
Sélectionnez votre UIPageControl allez à l'inspecteur d'attributs. Tada.
Ou bien vous pouvez jouer avec ces 2 propriétés:
pageIndicatorTintColor property
currentPageIndicatorTintColor property
C'est tellement simple. J'ai relu la question pour m'assurer de ne pas me tromper. Vous voulez vraiment juste changer la couleur n'est-ce pas? Alors oui.
Vous êtes toujours coincé avec ces points délicats. Utilisez la technique JWD pour les superbes images à points.
une seule ligne de code pour répondre à votre demande. L'exemple défini sur la couleur noire.
pageControl.pageIndicatorTintColor = [UIColor blackColor];
DDPageControl est un excellent remplacement. Vérifiez-le!
Vous pouvez également consulter le billet de blog archivé ici .
Vous pouvez modifier la couleur de teinte de l'indicateur de page et la couleur de teinte de l'indicateur de page actuelle avec le code suivant:
pageControl.pageIndicatorTintColor = [UIColor orangeColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
si vous voulez simplement changer la couleur des points ou le personnaliser, vous pouvez le faire comme recommandé par JWD, mais d'une autre manière:
#pragma mark - LifeCycle
- (void)setCurrentPage:(NSInteger)page
{
[super setCurrentPage:page];
[self updateDots];
}
#pragma mark - Private
- (void)updateDots
{
for (int i = 0; i < [self.subviews count]; i++) {
UIView* dot = [self.subviews objectAtIndex:i];
if (i == self.currentPage) {
dot.backgroundColor = UIColorFromHEX(0x72E7DB);
dot.layer.cornerRadius = dot.frame.size.height / 2;
} else {
dot.backgroundColor = UIColorFromHEX(0xFFFFFF);
dot.layer.cornerRadius = dot.frame.size.height / 2 - 1;
dot.layer.borderColor = UIColorFromHEX(0x72E7DB).CGColor;
dot.layer.borderWidth = 1;
}
}
}
En conséquence, vous obtiendrez quelque chose comme
Aussi des macros:
#define UIColorFromHEX(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:1.0]
La façon la meilleure et la plus simple de le faire consiste à ajouter les lignes de code suivantes dans la méthode didFinishLaunchingWithOptions dans AppDelegate.m
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor whiteColor];
Vous voudrez peut-être jeter un œil à cette solution dans un autre question stackoverflow .
Voici une réponse connexe pour l'utilisation d'une image personnalisée (si vous êtes flexible et pouvez utiliser une image plutôt que de modifier directement les couleurs).
Personnaliser le point avec l'image de UIPageControl à l'index 0 de UIPageControl