8
votes

UidatePicker adeSelectrow méthode?

Je connais uipickerviews utilise une méthode DidSelectrow pour mettre à jour des étiquettes, etc. Lorsqu'une ligne est sélectionnée.

J'ai un uidatePicker qui met à jour une étiquette lorsqu'une ligne est sélectionnée et que vous voulez aussi un uilabel qui mette à jour Avec chaque sélection, sa mise à jour en direct modifie la date de modification de la date. Je ne trouve aucune méthode telle que DisSelectrow pour le sélecteur de date cependant. Comment cela est-ce possible? P>

- (IBAction)dateButtonPressed
{
    [dateView setFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height)];
    [self.view addSubview:dateView];

    UIBarButtonItem *acceptButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismssPickerChangeDate)];
    self.navigationItem.rightBarButtonItem = acceptButton;
    [acceptButton release];

    UIBarButtonItem *cancelButton1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismssPickerCancel)];
    self.navigationItem.leftBarButtonItem = cancelButton1;
    [cancelButton1 release];

    self.navigationItem.title = @"Select Date";
    self.navigationItem.hidesBackButton = YES;
    [UIView animateWithDuration:.5 animations:^{
        [dateView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    }];
    NSDate *myDate = picker.date;

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    //NSDate *date = [NSDate date]; 
    [dateFormatter setDateFormat:@"MMM d y"]; 
    NSString *dateString = [dateFormatter stringFromDate:myDate]; 
    NSLog(@"New Date is = %@",dateString);
    dateLabel.text = dateString;
}


0 commentaires

3 Réponses :


25
votes

UidatePicker est un uicontrol, utilisez donc xxx pré>

pour envoyer un message à votre contrôleur. Le contrôleur peut alors obtenir l'état du sélecteur de date et mettre à jour l'étiquette. P>

Si votre sélecteur et votre étiquette sont les deux points de vente dans la même classe, dans la vue ViewDidLoad: P>

- (IBAction)updateLabelFromPicker:(id)sender {
    self.label.text = [self.dateFormatter stringFromDate:self.picker.date];    
}


12 commentaires

Merci Terry, je suis un peu confus comme quoi faire avec "votre contrôleur". J'ai actuellement un point de vente pour la datePicker et le Datelabel, je souhaite mettre à jour le temps réel.


Je l'ai mis à jour avec plus de détails. La classe que vous avez déclarée vos points de vente est votre contrôleur.


J'ai toutes la configuration NSFormatter car j'ai une autre étiquette qui met à jour après la pression de l'utilisateur effectuée, il suffit donc de configurer celui-ci comme en temps réel. Laissez-moi jouer avec le code que vous avez posté, merci.


hmm je ne peux pas l'obtenir correctement, je vais poster le code que j'utilise dans ma question merci.


La méthode Dateboutttonprimé est-elle la méthode que vous avez spécifiée dans addTtarget: action: forcontrolvents?


En fait, je veux que tout cela se produise dans la date de la date. Cette méthode soulève la vue avec la datePicker et l'étiquette que je veux mettre à jour en temps réel, y compris.


Cela ne fera que chercher le temps du sélecteur de date une fois, pas à chaque fois que le sélecteur change. Vous avez besoin du sélecteur pour envoyer un message lors de la modification de la mise à jour en direct.


Ok je vois ce que tu dis. Donc, basé sur le code que j'ai actuellement, qu'avez-je besoin de changer? Puis-je toujours garder tout le code dans cette méthode ou dois-je créer une nouvelle méthode et appeler cette méthode?


Vous pouvez conserver ce code, mais déplacer le champ de mise à jour du champ de texte dans une méthode distincte qui reçoit l'appel par datebuttonprimé et le sélecteur de date (via addTtarget: action: forcontrolevents)


Ok donc je retire la date de choses dans la méthode que j'ai précédemment et la remplaçante avec [auto-updatetelabel] je fais maintenant une méthode appelée - (VOID) Updatelabel; et inclura le code que vous avez énuméré ci-dessus?


Oui, ayez la méthode Dateboutttonprimé Call [auto-UpdateLabel] et do [Picker AddTarget: Auto Action: @Selector (Updatelabel) Forcontrolvents: UicontroleventValuchanged] dans la vue ViewDidLoadLoad


OK merci. J'ai ajouté que pour afficher la méthode de téléchargement et de configuration de la méthode de l'Updatelabel, je dois tout simplement avoir besoin de le remplir avec le code nécessaire. Est-ce que tout ce dont j'ai besoin dans Updatelabel, ce qui suit: self.label.text = [auto.DateFormatter stringfromdate: self.picker.date]; , avec le formateur de date?



1
votes

Un sélecteur de date fait des choses un peu différemment. De la documentation:

Lorsqu'il est correctement configuré, un objet UIDATEPICKER envoie un message d'action lorsqu'un utilisateur termine la rotation de l'une des roues pour modifier la date ou l'heure; L'événement de contrôle associé est l'uicontroleventvaluchangéChangé.

Parce qu'un UidatePicker hérite d'Uicontrol, vous avez accès à tous les différents événements tactiles que vous attendez (TouchUpinSide, etc.).


0 commentaires

-1
votes

SWIFT 3/4

func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
 {
   println("\(courseCatalog[row])")
    yourlabelname.text=courseCatalog[row]

}


0 commentaires