2017-07-22 1 views
0

J'ai rencontré une erreur lors de la transmission des arguments dans la méthode @selector.Passage des arguments dans la méthode @selector

Ceci est mon code:

-(void) accessoryView : (UITextField*) textField 
{ 

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; 
    numberToolbar.barStyle = UIBarStyleBlackTranslucent; 
    numberToolbar.items = @[[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)], 
          [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
          [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad:textField:)]]; 


    [numberToolbar sizeToFit]; 
    textField.inputAccessoryView = numberToolbar; 
} 

-(void)doneWithNumberPad : (UITextField*) txt : (id) sender { 

} 
+0

Vous ne pouvez pas transmettre d'arguments arbitraires au sélecteur d'action; le sélecteur doit être conforme au format attendu par l'élément du bouton de la barre – Paulw11

+0

Existe-t-il un autre moyen de passer la méthode "textField" à la méthode "doneWithNumberPad"? –

Répondre

1

Vous pouvez prendre l'aide de la variable de référence pour votre champ de texte. Déclarez une propriété globale en tant que champ de texte. Gardez une référence du champ de texte actif et accédez-y dans chaque méthode selon vos besoins.

UITextField *activeTextField; 

// UITextField Delegates 
-(void)textFieldDidBeginEditing:(UITextField *)textField {  
    activeTextField = textField; 
} 

Vous pouvez utiliser cette propriété activeTextField dans votre classe n'importe où.

Vous devez définir votre classe en tant que délégué de UITextField.

self.yourTextField.delegate = self 
+0

Merci pour votre réponse –

+0

Est-ce que cela vous a aidé à résoudre votre problème? – luckyShubhra

0

Première: Votre sélection est erroné. Je devrais être action:@selector(doneWithNumberPad::) ou renommer votre deuxième méthode à -(void)doneWithNumberPad : (UITextField*) txt textField: (id) sender. MAIS Deuxième: Vous ne pouvez pas envoyer de paramètres supplémentaires personnalisés avec une méthode d'action. Vous devez accéder au champ de texte sur une propriété. Dans votre cas, vous pouvez stocker le champ de texte actuel dans une propriété, lorsque l'édition dans les champs de texte commence. Votre contrôleur de vue doit implémenter UITextFieldDelegate pour recevoir cet événement.

+0

J'ai au total 10 textField et cinq d'entre eux doivent appeler accessoryView. Comment puis-je utiliser le code ci-dessus pour ce scénario. –

+0

J'ai prolongé mon message. – clemens

+0

Merci pour votre réponse –