2012-09-06 44 views
1

我新的iPhone,无法实现单选按钮在iPhone

我要实现我的应用程序单选按钮,也有我的应用程序三个按钮,按钮应该表现得像单选按钮。

这里是我的代码片段,

UIButton *Btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
Btn1.frame=CGRectMake(10, 190, 20, 20); 
[Btn1 setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
[Btn1 setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateSelected]; 
[Btn1 addTarget:self action:@selector(RadioButton:) forControlEvents:UIControlEventTouchUpInside]; 
[scrollVw addSubview:Btn1]; 

UIButton *Btn2 = [UIButton buttonWithType:UIButtonTypeCustom]; 
Btn2.frame=CGRectMake(10, 240, 20, 20); 
[Btn2 setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
[Btn2 setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateSelected]; 
[Btn2 addTarget:self action:@selector(RadioButton:) forControlEvents:UIControlEventTouchUpInside]; 
[scrollVw addSubview:Btn2]; 

UIButton *Btn3 = [UIButton buttonWithType:UIButtonTypeCustom]; 
Btn3.frame=CGRectMake(10, 290, 20, 20); 
[Btn3 setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
[Btn3 setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateSelected]; 
[Btn3 addTarget:self action:@selector(RadioButton:) forControlEvents:UIControlEventTouchUpInside]; 
[scrollVw addSubview:Btn3]; 


- (IBAction)RadioButton:(UIButton *)button{ 

    for (UIButton *Radiobutton in [self.view subviews]) { 
     if ([Radiobutton isKindOfClass:[UIButton class]] && ![Radiobutton isEqual:button]) { 
      [Radiobutton setSelected:NO]; 
     } 
    } 
    if (!button.selected) { 
     button.selected = !button.selected; 
    } 
} 

任何帮助将不胜感激。

回答

2

您正在检查self.view.subviews中的所有视图,但这些按钮实际上已添加到名为scrollVw的UIScrollView(我猜)。

更改for循环

for (UIButton *Radiobutton in [self.scrollVw subviews]) { 

如果scrollVw被添加为.H文件的属性。

1

另外,您可以简单地使用iOS类似的东西提供的控制:

UISegmentedControl 

它可以很容易地处理三个部分,是相当灵活,可以像一个单选按钮,在那里你可以只选择一个段或多个。

3

您可以使用以下代码。

 //Add all the buttons to class level NSMutable array 
     UIButton *Btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     Btn1.frame=CGRectMake(10, 190, 20, 20); 
     [Btn1 setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
     [Btn1 addTarget:self action:@selector(RadioButton:) forControlEvents:UIControlEventTouchUpInside]; 
     [scrollVw addSubview:Btn1]; 
     [self.buttonsArray addObject:Btn1]; 

     UIButton *Btn2 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     Btn2.frame=CGRectMake(10, 240, 20, 20); 
     [Btn2 setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
     [Btn2 addTarget:self action:@selector(RadioButton:) forControlEvents:UIControlEventTouchUpInside]; 
     [scrollVw addSubview:Btn2]; 
     [self.buttonsArray addObject:Btn2]; 

     UIButton *Btn3 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     Btn3.frame=CGRectMake(10, 290, 20, 20); 
     [Btn3 setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
     [Btn3 addTarget:self action:@selector(RadioButton:) forControlEvents:UIControlEventTouchUpInside]; 
     [scrollVw addSubview:Btn3]; 
     [self.buttonsArray addObject:Btn3]; 

- (IBAction)RadioButton:(id)sender{ 

     [self resetAllButtons]; 
     UIButton* button=(UIButton*) sender; 
     [button setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateNormal]; 

} 

-(void) resetAllButtons{ 
      for(int i=0;i<[self.buttonsArray count];i++){ 
       UIButton* button=[self.buttonsArray objectAtIndex:i]; 
       [button setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
      } 
} 
+0

这很好,是一个很好的解决方案。 – Sohan