2008-11-02 19 views
15

Tengo el siguiente código para crear un UIPickerView:¿Cómo cambio el tamaño del texto y el ancho del componente de un UIPickerView?

pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0f, 416.0f - height, 320.0f, height)]; 
pickerView.delegate = self; 
pickerView.showsSelectionIndicator = YES; 
[pickerView setSoundsEnabled:YES]; 

me gustaría cambiar el ancho de componentes y cambiar el tamaño del texto en cada componente. ¿Es posible hacer esto?

Gracias!

Respuesta

50

Usted puede cambiar el ancho mediante un método delegado apropiada

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { 
    switch(component) { 
     case 0: return 22; 
     case 1: return 44; 
     case 2: return 88; 
     default: return 22; 
    } 

    //NOT REACHED 
    return 22; 
} 

En cuanto a un tamaño de texto personalizado, puede utilizar el delegado para volver vistas personalizadas con cualquier texto de tamaño que desee:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
     UILabel *retval = (id)view; 
     if (!retval) { 
      retval= [[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)] autorelease]; 
     } 

     retval.text = @"Demo"; 
     retval.font = [UIFont systemFontOfSize:22]; 
     return retval; 
} 

Por supuesto, tendrá que modificar estos para tener los valores adecuados para su aplicación, pero debe llevarlo a donde necesita ir.

+0

Un par de errores en su segundo bloque de código: \t - La UIView debe enviarse a (UILabel *). \t - A la línea de asignación de retiros le falta un paréntesis de apertura y necesita llamar a initWithFrame; de ​​lo contrario, no se mostrará nada: es decir. \t retval = [[[UILabel alloc] initWithFrame: CGRectMake (0.0f, 0.0f, [pickerView rowSizeForComponent: component] .width, [pickerView rowSizeForComponent: component] .height)] liberación automática]; –

+0

Gracias, haré los cambios apropiados, aunque no es exactamente lo que usted propone. Voy a buscar un ID, básicamente porque es más corto y no abandonas nada porque el valor de la expresión ya está escrito en una UIView. –

+2

También quiero agregar esta línea a la respuesta en caso de que esté trabajando con una matriz para poblar el selector (lo más probable). En lugar de retval.text = @ "Demo", reemplace con retval.text = [messageArray objectAtIndex: row]; – Jazzmine

Cuestiones relacionadas