2012-07-03 75 views
0

我已經動態地創建了一些帶有一些值的RadioButton列表。在語法上,我改變了按鈕狀態,並改變了圖像的選擇和未選中。但問題是我可以同時選擇所有的radioButtons。實際上我需要一次選擇一個。 當我點擊下一個RadioButton時,之前選擇的按鈕狀態應該改爲未選中狀態。自定義RadioButton一次爲iPhone選擇一個?

這是我的代碼,我嘗試改變圖像,但是...我的代碼有些問題。

RadioButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)]; 
    [RadioButton setCenter:CGPointMake(116.0,p1)]; 
    [RadioButton setSelected:NO]; 
    [RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; 
    [RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.scrollView addSubview:RadioButton]; 




    -(void)RadioButtonTapped:(id)sender 
    { 


     UIButton *RadioButton1 = (UIButton*)sender ; 

     [self radiobuttonAction:RadioButton1]; 
    } 

-(void)radiobuttonAction:(UIButton *)Button 
    { 

     if(![Button isSelected]) 
     { 


      [Button setSelected:YES]; 
      [Button setImage:[UIImage imageNamed:@"radio_active.png"] forState:UIControlStateSelected]; //not working, button image is not changing 
     } 
    else 
     { 
      [Button setSelected:NO]; 
      [Button setImage:[UIImage imageNamed:@"radio_inactive.png"] forState:UIControlStateNormal]; 
     } 


} 

在哪裏可以更改以前選擇的按鈕的圖像。

在此先感謝

+0

如何使按鈕上的插座,例如你有3個按鈕,使3個插座,所以它可以很容易地做你的問題。 – Bazinga

+0

但我動態地創建了按鈕, – neerajPK

+0

'RadioButtonTapped'--在此,你是否在每個按鈕中都使用了這個按鈕? – Bazinga

回答

1

當您選擇一個按鈕時,取消選擇所有按鈕。如果你在你的滾動按鈕查看您可以通過用戶驗證碼:

//Your Method 
-(void)RadioButtonTapped:(id)sender 
{ 
    UIButton *RadioButton1 = (UIButton*)sender; 
    [self deselectAll]; 
    [self radiobuttonAction:RadioButton1];  
} 

- (void) deselectAll : (UIScrollView *) scrollView{ 
    NSArray *viewArray = [scrollView subviews]; 
    for (UIView *v in viewArray){ 
    if([v isKindOfClass:[UIButton class]]){ 
     [((UIButton *)v) setSelected:NO]; 
    } 
} 
} 

編輯:但是,如果你想給它真正的單選按鈕的效果(其中一個總是選擇,只有一個被選中)這對你來說會更容易。使用下面的代碼:

//A globle refButton 
    UIButton *refButton = nil; 
//Set image for both state: 
[RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; 
[RadioButton setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateSelected]; 

//make any of above default select: may be the last one and pass that to `refButton` 
refButton = RadioButton; 



//Your Method 
-(void)RadioButtonTapped:(id)sender 
{ 
    [refButton setSelected:NO]; 
    refButton = (UIButton*)sender; 
    [refButton setSelected:YES];  
} 
+0

好吧,那很好..謝謝你的反饋.... ,, – neerajPK

+0

但是,更多的疑問是, 0.因爲我需要標籤值來檢索相應的數據,當你添加這些數據時,你怎麼可能在你的按鈕上添加了標籤值? – neerajPK

+0

?如果沒有,那就這樣做。然後讓我知道問題是否存在。 – rptwsthi

-2

創建按鈕這樣,

for(int i=0;i<4;i++) 
{ 
RadioButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
RadioButton.tag = i*100; 
[RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)]; 
[RadioButton setCenter:CGPointMake(116.0,p1)]; 
[RadioButton setSelected:NO]; 
[RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; 
[RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
[self.scrollView addSubview:RadioButton]; 

} 

添加動作像這樣,

-(void)radiobuttonAction:(UIButton *)Button 
{ 

    UIButton *Button = (UIButton*)sender; 
    for(UIButton * btn in self.scrollview.subViews) 
    { 
    if(btn.tag == Button.tag) 
    { 
     if(![Button isSelected]) 
     { 
      [Button setSelected:YES]; 
      [Button setImage:[UIImage imageNamed:@"radio_active.png"] forState:UIControlStateSelected]; //not working, button image is not changing 
     } 
     else 
     { 
      [Button setSelected:NO]; 
      [Button setImage:[UIImage imageNamed:@"radio_inactive.png"] forState:UIControlStateNormal]; 
     } 
    } 
    else 
    { 
     //do selected or de-selected code for other buttons 

    } 

} 
+0

您能否描述爲什麼您將標籤更改爲RadioButton.tag = i * 100; ,結果是什麼? – neerajPK

+0

我認爲這不是解決方案..親愛的.. – rptwsthi

+0

是的,它已經在一個循環。 – neerajPK

0

標籤在創建時的按鈕。 點擊按鈕時,通過標記獲取按鈕。取消選擇所有按鈕。更新您收到的當前按鈕作爲n參數。

+1

好吧,這讓我覺得,謝謝你.. – neerajPK

0

假設您想添加5個單選按鈕。

- (void)viewDidLoad 
{ 
     for (int i = 0; i < 5; i++) { 
      UIButton* RadioButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
      [RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)]; 
      [RadioButton setCenter:CGPointMake(116.0, i * 40)]; 
      //  [RadioButton setTag:i * 10]; 
      [RadioButton setSelected:NO]; 
      [RadioButton setImage:[UIImage imageNamed:@"unCheck.png"] forState:UIControlStateNormal]; 
      [RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
      [self.scrollView addSubview:RadioButton]; 

    } 
    } 

//do not forget to declared this in your header file 
-(void)RadioButtonTapped:(UIButton*)button; 
{ 
     for (UIButton *btn in self.scrollView.subviews) { 
      [btn setImage:[UIImage imageNamed:@"unCheck.png"] forState:UIControlStateNormal]; 
     } 
     [button setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal]; 
} 

上面的代碼更新UI,設置所有的按鈕的圖像爲「取消」,然後改變最後按下按鈕「檢查」的圖像。

+0

謝謝你的反饋,它適用於rptwsthis解決方案。 – neerajPK

相關問題