with uipicker example custom iphone uipickerview

iphone - example - Cambiar el fondo de UIPickerView



uitextfield picker (10)

Quiero cambiar el color del borde de un UIPickerView. No veo una propiedad de tinte para el UIPickerView. ¿Hay alguna manera de hacer esto? ¿O una solución?

Gracias.


Aquí hay una versión moderna, perfecta de píxeles, con ARC de la respuesta de @Lukas, porque algunas preguntas nunca pasan de moda:

#import <QuartzCore/QuartzCore.h> // . . . CALayer* mask = [[CALayer alloc] init]; mask.backgroundColor = [UIColor blackColor].CGColor; mask.frame = CGRectInset(picker.bounds, 10.0f, 10.0f); mask.cornerRadius = 5.0f; picker.layer.mask = mask;

Esta respuesta funciona para CUALQUIER tamaño del selector b / c, las dimensiones de la capa se calculan sobre la marcha.



El selector no tendrá subvistas hasta que esté completamente cargado. Si intentas hacer esto:

[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES]; [(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];

en viewDidLoad o viewWillAppear no funcionará . Sin embargo, moví el mío a uno de los métodos del protocolo UIPickerView y eliminó el marco de fondo.

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (self.pickerBackgroundNotHidden) { self.pickerBackgroundNotHidden = false; [(UIView*)[[tempPicker subviews] objectAtIndex:0] setHidden:YES]; [(UIView*)[[tempPicker subviews] objectAtIndex:7] setHidden:YES]; [(UIView*)[[tempPicker subviews] objectAtIndex:8] setHidden:YES]; } return [arrayColors objectAtIndex:row]; }

Probablemente podría hacer una subclase del selector para hacer esto un poco más eficientemente, pero prefiero evitar las subclases.

Oh, también, esto es probablemente obvio, pero si su selector no tiene ningún elemento, el código anterior no eliminará las subvisiones.


Mi UIPickerView tiene 3 componentes. Y ningún indicador de selección.

Esto le da 11 subvistas. [[picker subviews] count]

Al ocultar la primera y la última subvista, se elimina totalmente el fondo.

[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES]; [(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];

Al ocultar cada tercera subvista (índices 1, 4 y 7) se oculta el fondo opaco de los componentes. Dando un efecto bastante agradable que puedo desollar como deseo.

Espero que ayude a alguien :)


Para corregirte, puedes poner un .png encima de UIPickerview y seguir utilizando la Vista del selector, solo asegúrate de que el medio sea transparente o no veas las filas.


Puede cambiar el color de fondo reemplazando completamente la imagen de fondo con una de su elección usando IXPickerOverlayView disponible en GitHub (el repositorio contiene un ejemplo ilustrado de IXPickerOverlayView usar esta clase).

Tenga en cuenta que tendrá que dibujar el fondo (rectangular) desde cero, pero a diferencia de cualquiera de las soluciones mencionadas aquí, este enfoque es totalmente dinámico: el control se verá correctamente incluso si cambia el número de ruedas de selección y sus tamaños en tiempo de ejecución (como UIDatePicker lo hace cuando cambias la configuración regional de tu sistema).

Una vez que tenga su imagen de fondo, usar IXPickerOverlayView es tan simple como agregar una instancia de IXPickerOverlayView en la parte superior de su vista de Selector y asignar la propiedad hostPickerView .


Puedes hacer lo siguiente:

establezca el color de fondo de la vista del selector por asistente o por código de la siguiente manera:

Picker1.backgroundColor = [UIColor someColor];// clearColor for transparent

Establezca el valor alfa para las subvistas de vista de selector numeradas 0, 1 y 3. (No sé por qué hay una subvista 2 pensada). Hágalo por código después de la primera carga de datos para la vista del selector de la siguiente manera (lanzará una excepción si lo hace en DidViewLoad).

[(UIView*)[[Picker1 subviews] objectAtIndex:0] setAlpha:someValue];// 0.0f for transparent [(UIView*)[[Picker1 subviews] objectAtIndex:1] setAlpha:someValue]; [(UIView*)[[Picker1 subviews] objectAtIndex:3] setAlpha:someValue];

No olvide borrar el color de fondo de la etiqueta que está enviando a la vista del selector en el método viewForRow.

lbl.backgroundColor = [UIColor someColor];// could be clearColor


Si solo desea una solución alternativa, tome una captura de pantalla en el simulador, ábrala en photoshop, recórtela en el área UIPickerView, haga que el centro sea transparente, aplique el tinte que desee, agregue esa imagen a su proyecto y agréguela como un UIImageView encima de UIPickerView.


Simplemente agregue esta línea a uno de sus métodos UIPickerView :

[[[MyPicker subviews] objectAtIndex:4] setBackgroundColor: [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]]];


También podría enmascarar el componente. Con un poco de fiddeling puede obtener el tamaño del componente y recortarlo con el siguiente código:

CALayer* mask = [[CALayer alloc] init]; [mask setBackgroundColor: [UIColor blackColor].CGColor]; [mask setFrame: CGRectMake(10.0f, 10.0f, 260.0f, 196.0f)]; [mask setCornerRadius: 5.0f]; [picker.layer setMask: mask]; [mask release];

No te olvides

#import <QuartzCore/QuartzCore.h>