1

iPhone初心者ですが、

アプリにラジオ ボタンを実装したいのですが、アプリには 3 つのボタンがあり、ボタンはラジオ ボタンのように動作する必要があります。

これが私のコードスニペットです。

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

どんな助けでも大歓迎です。

4

4 に答える 4

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];
           }
}
于 2012-09-06T12:30:52.980 に答える
2

すべてのビューをチェックインしていますself.view.subviewsが、ボタンは実際にはUIScrollViewscrollVw と呼ばれる (私が推測する) に追加されています。

for ループを次のように変更します。

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

scrollVw が.hファイルのプロパティとして追加されている場合。

于 2012-09-06T11:39:08.030 に答える
1

または、iOSが提供するコントロールを次のような目的で使用することもできます。

UISegmentedControl

3つのセグメントを簡単に処理でき、非常に柔軟性があり、1つまたは複数のセグメントのみを選択できるラジオボタンのように動作できます。

于 2012-09-06T11:43:04.343 に答える
1

UISegmentedControl を使用することへの反対はありますか? 一度に 1 つのオプションしか選択できないという点で、ラジオ ボタンのように機能します。ラジオボタンの外観に固執している場合は、それをサブクラス化して外観を変更します。

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

于 2012-09-06T11:39:25.590 に答える