只允许选择一个UIButton

时间:2011-12-19 15:56:50

标签: objective-c ios uibutton

我有三个UIButtons子类(RadioBox)。我试图让它一次只能选择三个RadioBox中的一个。为此,我有两个委托方法; radioSelectedState和radioUnselectedState。分别在选择和取消选择RadioBox时调用这些方法。不幸的是,我的代码到目前为止只允许一次选择一个按钮,但是如果我取消选择当前选择的按钮,按钮将取消选择而不是保持相同的状态。

请告诉我我哪里出错了?

先谢谢。

- (void) radioSelectedState:(RadioBox *) rb {

    if (selectedRadios == nil) {
        selectedRadios = [[NSMutableArray alloc] init];
   }

    if ([selectedRadios count] == 0) {
        [selectedRadios addObject:rb];
    }

    else if ([selectedRadios count] == 1 && ![selectedRadios containsObject:rb] ) {
        [(RadioBox *) [selectedRadios objectAtIndex:0] setState:RadioBoxStateUnselected];

        [selectedRadios removeObjectAtIndex:0];

        [selectedRadios addObject:rb];

    }

    else if ([selectedRadios count] == 1 && [selectedRadios containsObject:rb]) {
        return;
    }

}

- (void) radioUnselectedState:(RadioBox *) rb {

    if ([selectedRadios count] == 1) {
        return;
    }

    [selectedRadios removeObject:rb];

}

2 个答案:

答案 0 :(得分:1)

您可以轻松地将您的RadioBox对象保留在NSArray中,并在每次选择一个时循环遍历它,确保取消选中其他所有对象。

类似的东西:

// This assumes you have your RadioBox objects inside an NSArray named radioBoxArray
- (void)radioBoxTapped:(RadioBox *)rb {
    for (RadioBox * box in radioBoxArray) {
        [box setSelected:NO];
    }

    [rb setSelected:YES];
}

答案 1 :(得分:0)

为您的协议添加新方法

- (BOOL)radioCanUnselect:(RadioBox *)radioBox;

在进行任何取消选择之前调用此方法,控制器只回复YES / NO然后您做出相应的回应。

你也可以用其他方式做同样的事情

- (BOOL)radioCanSelect:(RadioBox *)radioBox;

并添加允许一次选择的数量的规则