2009-11-19 14 views
6

¿Hay alguna manera de agregar un icono de cristal de aumento en lugar del punto de mi primera página, que permite realizar algunas búsquedas utilizando UIPageControl para mi aplicación nativa en el iPhone?UIPageControl dot para una página de búsqueda

He intentado googlear, pero no he encontrado preguntas similares en absoluto, pero parece ser una característica muy extendida en las aplicaciones de Apple.

¿Alguien me puede ayudar con un consejo?

Respuesta

7

Básicamente UIPageControl tiene una matriz _indicators que contiene UIViews para cada uno de los puntos. Esta matriz es una propiedad privada, por lo que no debe meterse con ella. Si necesita iconos personalizados, tendrá que hacer su propia implementación del indicador de página.

Editar: Después de investigar un poco más, parece que puede reemplazar las subvistas de UIPageControl para personalizar las imágenes de puntos. Compruebe http://www.onidev.com/2009/12/02/customisable-uipagecontrol/ para más detalles. Sin embargo, aún no estoy seguro de cómo los revisores de Apple van a pensar en hacer tal cosa.

+0

Gracias por su respuesta! Esperaba hasta el final que no sea de esta manera: -/ – Denis

+0

Logré mi objetivo agregando una sub-vista a UIPageControl, arriba del ícono de búsqueda (tuve que pasar un tiempo para descubrir su algoritmo de ubicación) . Funciona justo como sea necesario. Lo que sea, tengo que enviar una pequeña culpa al lado de Apple por no permitir esta personalización fuera de la caja. – Denis

+1

Hemos enviado aplicaciones utilizando la técnica descrita en el enlace que proporcionó sin ningún problema. – hennes

1

Creé una subclase UIPageControl para lograr esto fácil y legalmente (sin API privadas). Básicamente, sobrescribí setNumberOfPages: inserto un UIImageView con el ícono dentro del último círculo. Luego, en el método setCurrentPage: detecto si la última página se resalta o no, para modificar el estado de UIImageView y también, borrar el color de fondo del círculo ya que esto será actualizado automáticamente por las API privadas de UIPageControl.

Este es el resultado: enter image description here

Este es el código:

@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

Gracias. Esto me ayudó mucho. ¡Lo encontré mucho más limpio que el otro enfoque! – kekub