web-dev-qa-db-fra.com

Afficher le sélecteur de date sur le champ de texte

Je suis très nouveau sur iOS, donc il me manque évidemment quelques concepts en essayant de suivre cette solution Afficher le sélecteur de date en tapant sur le champ de texte à mon problème.

J'ai l'interface et l'implémentation dans une classe appelée DatepickerAppDelegate, mais je suis perdu ici:

"Dans le XIB, sortez une UIToolbar et un UIDatePicker mais ne les attachez pas à la vue. Connectez les prises de manière appropriée. DateChanged: répond aux changements dans le sélecteur de date et doneEditing: est appelé lorsque vous cliquez sur le bouton Terminé de la barre d'outils. Connectez-les également. Les méthodes sont implémentées comme indiqué ci-dessous. "

J'ai lu quelque chose sur les XIB mais j'utilise un storyboard, donc je pense que je n'en ai pas. De plus, je ne sais pas comment je suis censé retirer des éléments sans les attacher à mes contrôleurs de vue (j'essaie, mais quand je relâche le bouton de la souris, l'outil revient à la barre d'outils), et je ne ' Je ne comprends même pas pourquoi j'ai besoin d'une barre d'outils UIT.

Et enfin, comment connecter mon champ de texte au délégué datepicker?

Est-ce que quelqu'un peut m'aider?

MISE À JOUR:

En fait c'est très simple, j'ai juste besoin de:

datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

self.birthday.inputView = datePicker;
21
lolol

UIResponder, dont UITextField hérite, définit une propriété appelée inputView . Cette propriété (un UIView *) peut définir une vue qui sera affichée au lieu du clavier lorsque ce UIResponder deviendra le premier répondeur.

Ainsi, si vous voulez qu'un UIDatePicker apparaisse lorsque vous tapez dans un textField (c'est-à-dire que vous faites de ce textField le premier répondant), alors vous pouvez dire, naïvement:

UIDatePicker *datePicker = [[UIDatePicker alloc] init...];
... configure datePicker ...

[myTextField setInputView:datePicker];

Maintenant, lorsque votre UITextField est tapé, un UIDatePicker sera affiché à la place.

POURTANT

Vous voudrez faire plus que cela, car vous devrez gérer différentes orientations et différents idiomes.

Mais c'est l'idée de base.

(Et si vous voulez une barre d'outils au-dessus de UIDatePicker, c'est à cela que sert la propriété inputAccessoryView ...)

52
Dave DeLong

Dans viewDidLoad de ViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];

    UIDatePicker *datePicker = [[UIDatePicker alloc]init];
    [datePicker setDate:[NSDate date]];
    datePicker.datePickerMode = UIDatePickerModeDate;
    [datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged];
    [txtFieldBranchYear setInputView:datePicker];
}

Ajoutez une méthode dans votre ViewController

-(void) dateTextField:(id)sender
{
    UIDatePicker *picker = (UIDatePicker*)txtFieldBranchYear.inputView;
    [picker setMaximumDate:[NSDate date]];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    NSDate *eventDate = picker.date;
    [dateFormat setDateFormat:@"dd/MM/yyyy"];

    NSString *dateString = [dateFormat stringFromDate:eventDate];
    txtFieldBranchYear.text = [NSString stringWithFormat:@"%@",dateString];
}

txtFieldBranchYear est une sortie de UITextField

21
iAnkit

Ajoutez une vue datepicker et uitoolbarview à votre vue. Par exemple

CGFloat toolbarHeight = 44.f;
CGFloat datePickerHeight = 140.f;
CGFloat containerViewHeight = toolbarHeight+datePickerHeight;
//create container view for datepicker and toolbar
UIView *containerView = [[UIVIew alloc] initWithFrame:CGRectMake(0.f, [self.view bounds].size.height+containerViewHeight, [self.view bounds].size.width, containerViewHeight)];

//after init toolbar set the frame
toolBar.frame = CGRectMake(0.f,0.f,containerView.frame.size.width, toolbarHeight];
//then add on toolbar button save and release it after add

//after init datePicker set the frame
datePicker.frame = CGRectMake(0.f, toolbarHeight, containerView.frame.size.width, datePickerHeight);

//add datePicker and toolBar to containerView
[containerView addSubview: toolBar];
[containerView addSubview: datePicker];

[toolBar release];
[datePicker release];

//add containerView to main view

[self.view addSubview: containerView];
[containerView release];

Ainsi, lorsque la vue a été chargée, ils seront masqués Y de la vue du contener est en dehors du cadre de votre vue.

Vous devez maintenant affecter le délégué de propriété de UITextFieldDelegate

textfield.delegate = self;

Dans la méthode de délégué textFieldDidBeginEditing voir ITextFieldDelegate vous devez déclencher la méthode qui affichera votre datePicker et votre barre d'outils. Si vous avez plusieurs textFields pour définir ce qui a été sélectionné, utilisez la propriété de la balise , qui est un entier et vous pouvez utiliser le commutateur au lieu de plusieurs si conditions.

Pour afficher votre datePicker et votre barre d'outils, vous devez modifier le Y du cadre containerView. Voici comment procéder

CGRect containerViewFrame = containerView.frame;
containerViewFrame.y -=containerViewHeight;
containerView.frame = containerViewFrame;

Pour masquer juste plus la variable containerViewHeight. Vous pouvez utiliser UIViewAnimations pour l'afficher avec une animation. Par exemple UIViewAnimationCurveEaseInOut

0
artyom