2009-11-19 13 views
6

C'è un modo per aggiungere un'icona a forma di lente di ingrandimento invece del punto per la mia prima pagina, che consente di eseguire alcune ricerche, utilizzando l'UIPageControl per la mia applicazione nativa su iPhone?UIPageControl punto per una pagina di ricerca

Ho provato a google, ma non ho trovato domande simili, ma sembra una funzionalità diffusa nelle applicazioni Apple.

Qualcuno può aiutarmi con un consiglio?

risposta

7

Fondamentalmente UIPageControl ha un array _indicators che contiene Uiviews per ciascuno dei punti. Questo array è una proprietà privata, quindi non dovresti scherzare. Se hai bisogno di icone personalizzate, dovrai eseguire l'implementazione dell'indicatore di pagina.

Modifica: dopo ulteriori ricerche, sembra possibile sostituire le sottoview di UIPageControl per personalizzare le immagini punto. Controllare http://www.onidev.com/2009/12/02/customisable-uipagecontrol/ per i dettagli. Non sono ancora sicuro di come si sentiranno i critici Apple a fare qualcosa del genere.

+0

Grazie per la risposta! Speravo fino all'ultimo non sarà in questo modo: -/ – Denis

+0

Ho raggiunto il mio obiettivo aggiungendo una sotto-vista a UIPageControl, sopra l'icona di ricerca (ho dovuto dedicare un po 'di tempo a scoprire il suo algoritmo di posizionamento) . Funziona proprio come necessario. In ogni caso, devo inviare una piccola colpa al lato Apple per non consentire questa personalizzazione fuori dalla scatola. – Denis

+1

Abbiamo inviato app utilizzando la tecnica descritta nel link che hai fornito senza problemi. – hennes

1

Ho creato una sottoclasse UIPageControl per ottenere questo facilmente e legalmente (senza API private). Fondamentalmente, ho sovrascritto setNumberOfPages: inserire un UIImageView con l'icona all'interno dell'ultimo cerchio. Quindi sul setCurrentPage: metodo che rilevo se l'ultima pagina viene evidenziata o meno, per modificare lo stato di UIImageView e, inoltre, deselezionare il colore di sfondo del cerchio poiché questo verrà aggiornato automaticamente dalle API private di UIPageControl.

questo è il risultato: enter image description here

Questo è il codice:

@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

Grazie. Questo mi ha aiutato molto. L'ho trovato molto più pulito dell'altro approccio! – kekub

Problemi correlati