2009-06-16 52 views
-1

可能重複:
Uibutton events的UIButton事件

-(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變量名是 「數據」 我當我按下該按鈕時,想要在方法「showMessage」中獲取(在那裏打印)其值(YES U PRESSED BUTTON)。

我知道這是使用@選擇變量做..但我不知道它是怎麼做的

回答

4
  1. String對象和data objects是兩回事。不要將字符串變量命名爲「數據」 - 您將自己和任何其他讀取代碼的人設置爲混淆,並且您的程序會出現錯誤。
  2. @selector不是一個變量。它是字面表達的一部分。

要麼定義變量保存在字符串中showMessage:代替myButtonClick,或使一個實例變量,並創建字符串和init分配給它。

使它成爲一個實例變量也將修復你有泄漏(你alloc繩子,但從來沒有釋放),只要你放開字符串中dealloc。請參閱the Memory Management entry in Cocoa Core Competencies瞭解更多目前代碼錯誤原因。

我也很困惑myButtonClick應該做什麼。它當然不會點擊按鈕,它所做的只是創建它(在IB中你會發現更容易)。另外,你甚至不會把按鈕放到視圖中;你創建它並設置它,然後方法結束。