【问题标题】:Unable to implement radio button in iPhone无法在 iPhone 中实现单选按钮
【发布时间】:2012-08-31 05:18:38
【问题描述】:

我是 iPhone 新手,

我想在我的应用中实现单选按钮,我的应用中有三个按钮,按钮的行为应该像单选按钮。

这是我的代码 sn-p,

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;
    }
}

我们将不胜感激。

【问题讨论】:

    标签: iphone ios ipad uibutton radio-button


    【解决方案1】:

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

    将for循环改为

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

    如果 scrollVw 作为属性添加到 .h 文件中。

    【讨论】:

      【解决方案2】:

      或者,您可以简单地使用 iOS 提供的 Control 来完成类似的操作:

      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];
                   }
        }
        

        【讨论】:

          【解决方案4】:

          反对使用 UISegmentedControl?它就像一个单选按钮,因为它一次只能选择一个选项。如果您对单选按钮的外观一无所知,我会将其子类化以更改外观。

          http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UISegmentedControl_Class/Reference/UISegmentedControl.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-31
            相关资源
            最近更新 更多