2009-06-16 11 views
-1

Possible en double:
Uibutton eventsévénements UIButton avec @selector

-(void)myButtonclick { 
    NSString *data=[[NSString alloc]initWithString:@"YES U PRESSED BUTTON"]; 
    UIButton *refreshbutton=[UIButton buttonWithType:UIButtonTypeCustom]; 

    [refreshbutton setFrame:CGRectMake(15.0f, 330.0f, 150.0f, 32.0f)]; 
    [refreshbutton setCenter:CGPointMake(80.0f,340)]; 
    [refreshbutton setBackgroundImage: normalImage forState: UIControlStateNormal]; 
    [refreshbutton setBackgroundImage: downImage forState: UIControlStateHighlighted]; 
    [refreshbutton setBackgroundImage: selectedImage forState: UIControlStateSelected]; 
    [refreshbutton setTitle:@"Refresh" forState:UIControlStateNormal]; 
    [refreshbutton addTarget:self action:@selector(showMessage:) forControlEvents:UIControlEventTouchUpInside]; 
} 

-(id)showMessage:(id)sender{ 
    // Here I want to get the value of "data" which is defined the method 
    // "myButtonclick" in the first line. how it is possible..? 
} 

Dans le code ci-dessus dans la méthode "myButtonclick" Je mets un nom de variable NSString est "données" I Vous voulez obtenir (imprimer là) sa valeur (OUI U PRESSED BUTTON) dans la méthode "showMessage" quand j'appuie sur ce bouton.

Je sais que cela fait à l'aide variable @selector .. mais je ne sais pas comment il est fait

Répondre

4
  1. objets String et data objects sont deux choses différentes. Ne nommez pas une variable de chaîne "data": vous définissez vous-même et toute autre personne qui lit le code pour la confusion, et votre programme pour les bogues.
  2. @selector n'est pas une variable. Cela fait partie d'une expression littérale.

Soit définir votre variable qui contient la chaîne en showMessage: au lieu de myButtonClick, ou en faire une variable d'instance et de créer la chaîne et l'affecter à init. En le faisant une variable d'instance corrigera également la fuite que vous avez (vous alloc la chaîne mais ne la libérez jamais), tant que vous libérez la chaîne dans dealloc. Voir the Memory Management entry in Cocoa Core Competencies pour plus de détails sur la raison pour laquelle votre code actuel est erroné.

Je suis également confus quant à ce que myButtonClick est censé faire. Il ne clique certainement pas sur le bouton - tout ce qu'il fait est de le créer (ce que vous trouverez beaucoup plus facile à faire dans IB). De plus, vous ne mettez même pas le bouton dans une vue; vous le créez et le configurez, puis la méthode se termine.