2009-06-16 18 views
-1

Mögliche Duplizieren:
Uibutton eventsUIButton Ereignisse mit @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..? 
} 

In dem obigen Code in der Methode "MyButtonClick" Ich stellte ein NSString Variablenname "data" I möchte in der Methode "showMessage" seinen Wert (YES U PRESSED BUTTON) bekommen (dort drucken), wenn ich diesen Knopf drücke.

Ich weiß, das @selector Variable erfolgt über .. aber ich weiß nicht, wie es

getan wird

Antwort

4
  1. String-Objekte und data objects sind zwei verschiedene Dinge. Nenne keine String-Variable "Daten" - du setzt dich selbst und jeden anderen, der den Code liest, auf Verwirrung und dein Programm auf Bugs.
  2. @selector ist keine Variable. Es ist Teil eines wörtlichen Ausdrucks.

Entweder Ihre Variable definieren, die die Zeichenfolge in showMessage: statt myButtonClick hält, oder es eine Instanzvariable machen und die Zeichenfolge erstellen und es in init zuweisen.

Wenn Sie eine Instanzvariable erstellen, wird auch das Leck behoben, das Sie haben (Sie können die Zeichenfolge alloc aber niemals freigeben), solange Sie die Zeichenfolge in dealloc freigeben. Weitere Informationen dazu, warum der aktuelle Code falsch ist, finden Sie unter the Memory Management entry in Cocoa Core Competencies.

Ich bin auch verwirrt, was myButtonClick tun soll. Es klickt sicher nicht auf den Button - es wird nur erstellt (was Sie in IB viel einfacher finden). Plus, Sie setzen den Knopf nicht einmal in eine Ansicht; Sie erstellen es und richten es ein, und dann endet die Methode.