2014-01-30 52 views
1

我在同一個標​​簽上有3個UIButton。在同一個標​​簽上的三個UIButton之間切換selectedState

問題: 當我點擊按鈕1,按鈕2和BUTTON3他們都得到了選擇;然而,我想要的是當我選擇(例如)button2,其他按鈕被取消選中(就像html上的單選按鈕)。 關於如何解決此問題的任何想法?

這裏是我的代碼:

- (IBAction)button1:(UIButton *)sender { 
    sender.selected = !sender.selected; 
} 
- (IBAction)button2:(UIButton *)sender { 
sender.selected = !sender.selected; 
} 
- (IBAction)button3:(UIButton *)sender { 
sender.selected = !sender.selected; 
} 
+0

其描述使用上的點擊按鈕設置選擇並設置其他人以相同的方法取消選擇 – Seeker

回答

2

有幾個直接的解決方案。也許他們是不是最佳的,但你可以使用它們:

解決方案一:

與相應的屬性將您的按鈕:

@property (weak, nonatomic) IBOutlet UIButton *button1; 
@property (weak, nonatomic) IBOutlet UIButton *button2; 
@property (weak, nonatomic) IBOutlet UIButton *button3; 

在每個動作變化選擇屬性各按鈕:

- (IBAction)button1Clicked:(UIButton *)sender { 
    _button1.selected = YES; 
    _button2.selected = NO; 
    _button3.selected = NO; 
} 

Se COND解決方案:

添加所有按鈕的NSArray:

NSArray *buttonsArray = [[NSArray alloc] initWithObjects: button1, button2, button3, nil]; 

然後用戶可以鏈接所有的按鈕與一個動作:

- (IBAction)buttonClicked:(UIButton *)sender { 
    for (UIButton *btn in _buttonsArray) { 
     if (btn == sender) 
      btn.selected = YES; 
     else 
      btn.selected = NO; 
    } 
} 

不要忘了讓所有的NSArray的訪問例如通過創建相應的屬性:

@property (weak, nonatomic) NSArray *buttonsArray; 

解決方案三:

您可以更改標籤屬性爲每個按鈕(通過界面生成器或代碼):

_button1.tag = 1; 
_button2.tag = 2; 
_button3.tag = 3; 

然後,所有的按鈕與一個動作(就像在前面的例子)鏈接:

- (IBAction)buttonClicked:(UIButton *)sender { 
    if (sender.tag == 1) { 
     _button1.selected = YES; 
     _button2.selected = NO; 
     _button3.selected = NO; 
    } else if (sender.tag == 2) { 
     _button1.selected = NO; 
     _button2.selected = YES; 
     _button3.selected = NO; 
    } else if (sender.tag == 3) { 
     _button1.selected = NO; 
     _button2.selected = NO; 
     _button3.selected = YES; 
    } 
} 

第四溶液:(由@ velmurugan-S)

使用一個操作所有按鈕,並設置其默認狀態,以選擇= NO

- (IBAction)buttonClicked:(UIButton *)sender { 
    _button1.selected = NO; 
    _button2.selected = NO; 
    _button3.selected = NO; 

    sender.selected = YES; 
} 

摘要:

我建議你使用第二個解決方案是最優的一個。

+0

非常感謝您的幫助!我正在嘗試使用第一種解決方案,但它在此行中說* button1.selected = YES; * button1是未聲明的標識符,爲什麼? –

+0

你把你的按鈕與屬性聯繫起來了嗎?只需按Ctrl +拖動每個按鈕到相應的屬性。 – etolstoy

+0

是的,但同樣的錯誤給出:s –

0

你不得不改變選擇的沙爹爲您選擇了一個按鈕,您需要更改其他按鈕狀態了。

0
- (IBAction)button1:(UIButton *)sender { 
    btn1.selected = YES; 
    btn2.selected = NO; 
    btn3.selected = NO; 

} 
- (IBAction)button2:(UIButton *)sender { 

    btn1.selected = NO; 
    btn2.selected = YES; 
    btn3.selected = NO; 
} 
- (IBAction)button3:(UIButton *)sender { 
    btn1.selected = NO; 
    btn2.selected = NO; 
    btn3.selected = YES; 
} 
+0

感謝您的幫助,我真的很感激它,@etolstoy解決方案合作。所以我還沒有嘗試過你的解決方案。不管怎樣,謝謝你 !! –

1

你可以做的是在接口部分連接按鈕1,按鈕2,按鈕3,以相同的button123給他們適當的標籤

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

在下面的代碼

- (IBAction)button123:(UIButton *)sender { 

if (sender.tag == 111) 
{ 
    sender.selected = !sender.selected; 

    if (sender.selected) 
    { 
     self.button2.selected = NO; 
     self.button3.selected = NO; 


    } 

} 
else if (sender.tag == 222) 
{ 
    sender.selected = !sender.selected; 

    if (sender.selected) 
    { 
     self.button1.selected = NO; 
     self.button3.selected = NO; 

    } 


} 
else if (sender.tag == 333) 
{ 
    sender.selected = !sender.selected; 

    if (sender.selected) 
    { 
     self.button1.selected = NO; 
     self.button2.selected = NO; 

    } 

} 
+0

感謝您的幫助,我真的很感激它,@etolstoy解決方案一起工作。所以我還沒有嘗試過你的解決方案。不管怎樣,謝謝你 !! –

相關問題