iOS: rellenar un UIPickerView estático

Tengo un formulario de perfil como parte de un process de logging para una aplicación de iOS .

Me gustaría usar un menu desplegable para elementos como género, título, date de nacimiento, etc. Los datos para cada uno serán estáticos. Usaré UIPickerView para implementar, pero mi pregunta es: ¿necesito crear matrices y delegates de datos para poblar cada selector individual o hay una forma más sencilla de aplicar datos estáticos?

¿Puedes hacerlo sin un delegado? No.

¿Puedes hacerlo sin una matriz? Sí, pero no deberías hacerlo.

Aquí hay un ejemplo sin una matriz (de http://cocoamatic.blogspot.com/2010/08/create-uipickerview-programmatically.html ).

 - (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { // Handle the selection } // tell the picker how many rows are available for a given component - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { NSUInteger numRows = 3; return numRows; } // tell the picker how many components it will have - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } // tell the picker the title for a given component - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { NSString *title; title = [@"" stringByAppendingFormat:@"Row %d",row]; return title; } // tell the picker the width of each row for a given component - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { int sectionWidth = 300; return sectionWidth; } 

Sin embargo, realmente debería usar una matriz, lo que lo hace mucho más fácil de leer y mantener. Si desea agregar un valor adicional, simplemente agreguelo a su matriz. En lugar de actualizar en varios lugares, simplemente agregue otro valor a su matriz. Además, mucho más fácil de entender.

 @implementation PickerViewController . . - (void)viewDidLoad { [super viewDidLoad]; _myArray = @[@"Row 1", @"Row 2", @"Row 3",]; } - (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { // Handle the selection } // tell the picker how many rows are available for a given component - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { NSUInteger numRows = 3; return _myArray.count; } // tell the picker how many components it will have - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } // tell the picker the title for a given component - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { NSString *title; title = myArray[row]; return title; } // tell the picker the width of each row for a given component - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { int sectionWidth = 300; return sectionWidth; } 

Si tuviera múltiples selectores, simplemente usaría varias matrices y verificará cada PickerView para ver cuál tenía desde que se pasa el PickerView a cada una de las funciones enumeradas.

 @implementation PickerViewController . . - (void)viewDidLoad { [super viewDidLoad]; _myArray1 = @[@"Row 1", @"Row 2", @"Row 3",]; _myArray2 = @[@"Row 1-2", @"Row 2-2", @"Row 3-2", @"Row 4-2"]; UIPickerView pickerView1 = [[UIPickerView alloc] init]; UIPickerView pickerView2 = [[UIPickerView alloc] init]; } - (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { // Handle the selection if (pickerView == pickerView1) { // First Picker } else if (pickerView == pickerView2) { // First Picker } } // tell the picker how many rows are available for a given component - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (pickerView == pickerView1) { // First Picker return _myArray1.count; } else if (pickerView == pickerView2) { // Second Picker return _myArray2.count; } // A third picker passed in somehow return 0; } // tell the picker how many components it will have - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { if (pickerView == pickerView1) { // First Picker return 1; } else if (pickerView == pickerView2) { // Second Picker return 1; } // A third picker passed in somehow return 0; } // tell the picker the title for a given component - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { NSString *title; if (pickerView == pickerView1) { // First Picker title = myArray1[row]; } else if (pickerView == pickerView2) { // Second Picker rtitle = myArray2[row]; } return title; } // tell the picker the width of each row for a given component - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { if (pickerView == pickerView1) { // First Picker return 300; } else if (pickerView == pickerView2) { // Second Picker return 400; } // A third picker passed in somehow return 0; }