2009-11-19 5 views
6

Y a-t-il un moyen d'ajouter une icône de verre grossissant au lieu du point pour ma première page, qui permet d'effectuer une recherche en utilisant UIPageControl pour mon application native sur l'iPhone?Point UIPageControl pour une page de recherche

J'ai essayé de google, mais je n'ai pas trouvé de questions du tout, mais cela ressemble à une fonctionnalité répandue dans les applications Apple.

Quelqu'un peut-il m'aider avec un conseil?

Répondre

7

Fondamentalement UIPageControl a un tableau _indicators qui contient UIViews pour chacun des points. Ce tableau est une propriété privée, donc vous ne devriez pas jouer avec. Si vous avez besoin d'icônes personnalisées, vous devrez faire votre propre implémentation d'indicateur de page. Editer: Après quelques recherches supplémentaires, il semble que vous pouvez remplacer les sous-vues UIPageControl pour personnaliser les images par points. Vérifiez http://www.onidev.com/2009/12/02/customisable-uipagecontrol/ pour plus de détails. Toujours pas sûr comment les critiques d'Apple vont se sentir à faire une telle chose cependant.

+0

Merci pour votre réponse! J'espérais que ce ne serait pas ainsi: -/ – Denis

+0

J'ai atteint mon objectif en ajoutant une vue secondaire à l'UIPageControl, au dessus de l'icône de recherche (j'ai du passer du temps à trouver son algorithme de placement) . Cela fonctionne juste comme nécessaire. Quoi qu'il en soit, je dois envoyer un petit reproche au côté de l'Apple pour ne pas permettre cette personnalisation hors de la boîte. – Denis

+1

Nous avons soumis des applications en utilisant la technique décrite dans le lien que vous avez donné sans aucun problème. – hennes

1

J'ai créé une sous-classe UIPageControl pour y parvenir facilement et légalement (sans API privées). Fondamentalement, j'ai remplacé setNumberOfPages: insérer un UIImageView avec l'icône à l'intérieur du dernier cercle. Ensuite, sur la méthode setCurrentPage: je détecte si la dernière page est mise en évidence ou non, pour modifier l'état de UIImageView et aussi, effacer la couleur d'arrière-plan du cercle car cela sera automatiquement mis à jour par les API privées UIPageControl.

Ceci est le résultat: enter image description here

Voici le code:

@interface EPCPageControl : UIPageControl 
@property (nonatomic) UIImage *lastPageImage; 
@end 

@implementation EPCPageControl 

- (void)setNumberOfPages:(NSInteger)pages 
{ 
    [super setNumberOfPages:pages]; 

    if (pages > 0) { 

     UIView *indicator = [self.subviews lastObject]; 
     indicator.backgroundColor = [UIColor clearColor]; 

     if (indicator.subviews.count == 0) { 

      UIImageView *icon = [[UIImageView alloc] initWithImage:self.lastPageImage]; 
      icon.alpha = 0.5; 
      icon.tag = 99; 

      [indicator addSubview:icon]; 
     } 
    } 
} 

- (void)setCurrentPage:(NSInteger)page 
{ 
    [super setCurrentPage:page]; 

    if (self.numberOfPages > 1 && self.lastPageImage) { 

     UIView *indicator = [self.subviews lastObject]; 
     indicator.backgroundColor = [UIColor clearColor]; 

     UIImageView *icon = (UIImageView *)[indicator viewWithTag:99]; 
     icon.alpha = (page > 1 && page == self.numberOfPages-1) ? 1.0 : 0.5; 
    } 
} 
+0

Merci. Cela m'a beaucoup aidé. Je l'ai trouvé beaucoup plus propre que l'autre approche! – kekub

Questions connexes