web-dev-qa-db-fra.com

Sélecteur contextuel / modal pour un champ de texte dans iOS 7

J'ai beaucoup de mal à trouver comment implémenter un sélecteur de popup standard. Comme l'écran d'enregistrement de nombreuses applications lorsqu'un utilisateur sélectionne le champ de texte d'anniversaire, j'aimerais qu'un sélecteur contextuel apparaisse pour que les utilisateurs puissent sélectionner leur anniversaire, cliquer sur Terminé et la date formatée sera ajoutée au champ de texte. Cela ne semble pas être difficile, mais il semble qu'il n'y ait pas de moyen simple, clair et standard de le faire dans iOS 7.

J'ai cherché sur Internet et vu certains dire d'utiliser des modaux, d'autres disent des feuilles d'actions, d'autres des popups et d'autres encore un contrôleur de vue séparé.

Quelqu'un peut-il me dire quelle est la façon standard de procéder ou un extrait sur la façon de le mettre en œuvre?

32
ChuckKelly

Je pense que la manière "standard", est de définir le sélecteur comme inputView du champ de texte.

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

Il apparaîtra devant le bas, tout comme le clavier lorsque vous touchez dans le champ de texte.

Voici une implémentation simple de la façon d'utiliser un sélecteur comme vue d'entrée:

@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];
}
71
rdelmar

La bibliothèque ActionSheetPicker-3. semble faire assez bien cela.

Date chooser

animation

16
Lawrence Kesteloot