2016-09-22 3 views
0

J'ai ce ci-dessous méthode déléguée qui reçoit stickerURLString en entrée:Comment passer un paramètre de chaîne à une autre méthode à l'aide du sélecteur de bouton?

- (void)selectedSticker:(NSString *)stickerURLString { 
    //... 
     [self.stickerPreviewButton addTarget:self action:@selector(sendStickerPreviewButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    //... 
} 

Et le sélecteur appelle cette méthode sendStickerPreviewButtonPressed:

- (void)sendStickerPreviewButtonPressed: (NSString *)stickerURLString { 
    [self.delegate InputFunctionView:self sendSticker:stickerURLString]; 
} 

Comme vous pouvez le voir afin de faire ce travail comme prévu je dois transmettre stickerURLString de selectedSticker méthode à sendStickerPreviewButtonPressé.

J'ai essayé:

[self.stickerPreviewButton performSelector:@selector(sendStickerPreviewButtonPressed:) withObject:stickerURLString]; 

au lieu de ceci:

[self.stickerPreviewButton addTarget:self action:@selector(sendStickerPreviewButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

Mais je suis "mettre fin à l'exception du type uncaught NSException" erreur.

Alors, quelqu'un sait comment transmettre un paramètre de chaîne à une autre méthode via le sélecteur de boutons?

+0

double possible de [Joindre le paramètre à l'action button.addTarget à Swift] (http://stackoverflow.com/questions/24814646/attach-parameter-to-button-addtarget-action-in-swift) –

+2

déclarez une variable globale et affectez la valeur à votre méthode. –

+0

@AnuradhS oui il me semble que c'est la bonne façon d'utiliser la variable globale même si j'essaie d'éviter cela car mon code est assez complexe. Merci! – SanitLee

Répondre

0

Pour UIControl objet fonction 1er paramètre est type d'id, passe par le contrôle lui-même, vous obtenez un objet uibutton comme un paramètre dans sendStickerPreviewButtonPressed: fonction qui n'est pas convertible en chaîne, Donc vous avez une erreur, Vous pouvez passer string En étendant la classe UIbutton par votre classe personnalisée . puis cliquez sur le bouton Créer de votre propre classe, et vous obtenez le bouton de l'expéditeur du formulaire de propriété personnalisée.

 -(void)sendStickerPreviewButtonPressed:(mycustomButton*)sender{ 
     //sender.myCustomString 
}