2013-10-09 49 views
4

我有三個按鈕,他們都做同樣的事情執行segue。全部鏈接到相同的連接。如何確定哪個按鈕被按下了三個按鈕

- (IBAction)difficultyButtonPressed:(id)sender { 
    // Any difficulty selected 
    [self performSegueWithIdentifier:@"mainGameTurnGuess" sender:self]; 
} 

我需要做的是確定在prepareForSegue方法中按下了哪個按鈕。我如何判斷三個按鈕中的哪一個被按下。

沒有看按鈕上的措辭/文字,因爲這將改變本地化。

+0

爲每個添加不同的「標籤」值。 – Wain

+0

我有,但我如何在prepareForSegue中引用它們 – StuartM

+0

創建它們時,請保留對按鈕的強烈參考 – LuisCien

回答

8

就可以使用標記值ditermine丈量按鈕假設你有一個實例樹按鈕: -

@property (nonatomic, strong) UIButton *btn1; 
@property (nonatomic, strong) UIButton *btn2; 
@property (nonatomic, strong) UIButton *btn3; 

然後設置類似按鈕的標籤: -

btn1.tag=1; 
btn2.tag=2; 
btn3.tag=3; 

併爲每個設置相同IBAction按鈕和: -

[btn1 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

[btn2 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

[btn3 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

- (IBAction)difficultyButtonPressed:(UIButton*)sender 
{ 
NSLog(@"Button tag is %d",sender.tag); 

    // you can use if else condition using sender.tag like 

     if(sender.tag==1)//first button related identifire 
     { 
      [self performSegueWithIdentifier:@"mainGameTurnGuess_FirstButtonIdentirier" sender:sender]; 
     } 
     else if(sender.tag==2)//second button related identifier 
     { 
      [self performSegueWithIdentifier:@"mainGameTurnGuess_secondButtonIdentirier" sender:sender]; 
     } 
     else //Third button related identifier 
     { 
      [self performSegueWithIdentifier:@"mainGameTurnGuess_ThirdButtonIdentirier" sender:sender]; 
     } 

} 

對於信息

如果您使用的是IBActionid那麼你得到的按鈕對象,如: -

- (IBAction)difficultyButtonPressed:(id)sender { 
    UIButton *button = (UIButton *)sender; 
    NSLog(@"Button tag is %d",button.tag); 
} 
+0

你的第一個答案就足夠了。感謝這我需要指向UIButton的發件人有這個工作。之前,我只是獲取(id)發件人,因此無法訪問標籤 – StuartM

+0

您無需在此設置中使用標籤。而不是比較sender.tag == 1,你可以比較sender == btn1等。 – neilco

+0

@neilco有多種替代方法可以做同樣的事情,是的,如果你使用了(id),那麼你可以得到選定的按鈕對象像**'UIButton * button =(UIButton *)sender' ** –

0

店在一個實例變量按鈕的標籤,並期待在該變量時prepareForSegue被稱爲

0

您可以轉發sender參數發送到difficultyButtonPressed:,因爲這是按下的按鈕。也就是說,如果你這樣做:

- (IBAction)difficultyButtonPressed:(id)sender { 
    // Any difficulty selected 
    [self performSegueWithIdentifier:@"mainGameTurnGuess" sender:sender]; 
} 

發送到prepareForSegue:sender:將被按下的按鈕sender參數。

+0

如果您在按鈕IBAction中使用(id)而不是(UIButton *),那麼id不是Button對象,那麼您必須創建類似於** UIButton * button =(UIButton *)發件人的按鈕對象; ** –

+0

@NitinGohel不正確。試試看:將NSLog(@「%@」,sender)'添加到事件處理程序中,您將看到如下所示:'>'。如果您需要訪問UIButton的屬性和方法特性,則只需將'sender'強制轉換爲'UIButton'。 – neilco

0

您還可以使用Restoration Id按鈕。在prepareForSegue你就可以做到以下幾點:

UIButton *btnSender; 
if ([sender isMemberOfClass:[UIButton class]]) 
{ 
    btnSender = (UIButton *)sender; 
} 

// Then you can reference the Restoration Id or a tag of the clicked button to do further conditional logic if you want. 
if([btnSender.restorationIdentifier isEqualToString:@"myBtn1"]) 
{ 
    //do something 
} 

我引述蘋果文檔:

因爲塞格斯可以從多個源引起,可以使用在SEGUE和發件人的參數信息來消除歧義在您的應用中的不同邏輯路徑之間。例如,如果segue源自表視圖,sender參數將標識用戶點擊的表視圖單元格。您可以使用該信息設置目標視圖控制器上的數據