2009-06-16 3 views
-1

Можно создать дубликат:
Uibutton eventsUIButton события с @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..? 
} 

В приведенном выше коде в методе "myButtonclick" Я поставил один имя переменной NSString является "данные" I хочу получить (напечатать там) его значение (YES U PRESSED BUTTON) в методе «showMessage», когда я нажимаю эту кнопку.

Я знаю, что это делается с помощью переменной @selector .. но я не знаю, как это делается

ответ

4
  1. объекты типа String и data objects две разные вещи. Не называйте строковую переменную «данные» - вы устанавливаете себя и всех, кто читает код для замешательства, а ваша программа - для ошибок.
  2. @selector не является переменной. Это часть буквального выражения.

Либо определить переменную, которая содержит строку в showMessage: вместо myButtonClick, или сделать его переменную экземпляра и создать строку и присвоить его в init.

Выполнение этой переменной экземпляра также устраняет утечку, которую вы имеете (вы, alloc строка, но никогда не отпускаете ее), до тех пор, пока вы отпустите строку в dealloc. См. the Memory Management entry in Cocoa Core Competencies для более подробной информации о том, почему ваш текущий код является неправильным.

Я также смущен относительно того, что должно делать myButtonClick. Он, конечно, не нажимает кнопку - все, что она делает, это создать ее (что вам будет намного легче делать в IB). Кроме того, вы даже не помещаете кнопку в представление; вы создаете его и настраиваете, а затем метод заканчивается.

Смежные вопросы