Selector emergente / modal para un campo de texto en iOS 7


Estoy teniendo muchos problemas para averiguar cómo implementar un selector emergente estándar. Al igual que la pantalla de registro de muchas aplicaciones cuando un usuario selecciona el campo de texto de cumpleaños, me gustaría que apareciera un selector emergente para que los usuarios puedan seleccionar su cumpleaños, haga clic en hecho y la fecha formateada se agregará al campo de texto. Esto no parece que debería ser tan difícil, sin embargo, parece que no hay una forma simple, clara y estándar de hacer esto en iOS 7.

He buscado en Internet y he visto algunos diciendo usar modales, otros dicen actionsheets, otros dicen popups y otros dicen un controlador de vista separado.

¿Puede alguien decirme cuál es la forma estándar de hacer esto o un fragmento de código sobre cómo implementarlo?

Author: pnuts, 2013-12-07

2 answers

Creo que la forma "estándar", es establecer el selector como el inputView del campo de texto.

UIPickerView *picker = [[UIPickerView alloc] init];
self.textField.inputView = picker;

Aparecerá en la parte inferior, al igual que el teclado cuando se toca en el campo de texto.

Aquí hay una implementación simple de cómo usar un selector como una vista de entrada:

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf;
@property (strong,nonatomic) NSArray *theData;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIPickerView *picker = [[UIPickerView alloc] init];
    picker.dataSource = self;
    picker.delegate = self;
    self.tf.inputView = picker;
    self.theData = @[@"one",@"two",@"three",@"four"];
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return self.theData.count;
}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return  1;
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return self.theData[row];
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    self.tf.text = self.theData[row];
    [self.tf resignFirstResponder];
}
 69
Author: rdelmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-07 20:34:17

La biblioteca ActionSheetPicker-3.0 parece hacer esto bastante bien.

Selector de fecha

animación

 15
Author: Lawrence Kesteloot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-11 18:04:44