2013-07-20 145 views
1

我想要檢測按下哪個按鈕。我想知道是否有一些UIButton類的方法可以在按下按鈕時自動調用,這使我能夠找到按下按鈕的文本或標記並將其傳遞給變量?或者一些相同的objective-c事件方法?檢測按下哪個按鈕

我知道這個話題已經發布在這裏。常見的反應似乎是,這將是解決辦法:

在.h文件中

- (IBAction)buttonClicked:(UIButton *)sender; 

在.m文件

- (IBAction)buttonPressed:(UIButton *)sender{ 
// Do something her to display which button pressed 
} 

我也看到其他的例子,其名稱buttonPressed ,onButtonTao等

所以我假設這個方法必須從每個按鈕調用。然而,這不起作用,當我嘗試將同一個方法分配給多個按鈕時,xcode會抱怨。

下面的例子,在這裏張貼在堆棧,使用相同的動作,但編程:

for(int i = 0; i < 5; i++) { 
    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [aButton setTag:i]; 
    [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [aView addSubview:aButton]; 
} 

// then ... 

- (void)buttonClicked:(UIButton*)button 
{ 
    NSLog(@"Button %ld clicked.", (long int)[button tag]); 
} 

所以,我在這裏失蹤,爲什麼Xcode中不接受多個按鈕同樣的方法?還有其他一些方法可以檢測哪個按鈕被按下,而無需將特定操作連接到每個按鈕?

+1

Xcode以什麼方式抱怨? – Wain

+1

將多個控件連接到相同的操作方法是絕對有可能的。你需要對問題更具體。 –

回答

0

您可以將多個按鈕連接到Xcode中的相同操作方法。 創建和.h文件中的第一個動作,控制拖動了其餘按鈕 連接到現有的動作後:

enter image description here

然後你就可以在屬性檢查器分配不同的標籤按鈕, 和檢查[sender tag]在行動方法。

如果您使用相同的名稱創建新動作,則Xcode 將創建另一個具有相同名稱的方法,這會由於「重複聲明」而導致編譯器錯誤 。

+0

我知道這很簡單,當我得到答案時,我會感到「當然」:-)謝謝! –

0

它看起來像你試圖複製粘貼這Sample到你的代碼,它不工作,對不對?您應該提供框架到按鈕。

這裏是工作代碼:

for(int i = 0; i < 5; i++) 
{ 
    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    aButton.frame = CGRectMake(10 + i*50,10,50,50); 
    [aButton setTag:i]; 
    [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:aButton]; 
} 

這裏,框架不應是靜態的,否則按鈕會重疊。