获取设置为ON的开关数量

时间:2014-02-28 17:14:46

标签: ios objective-c uiswitch

我有这种方法。有什么方法可以计算出设置的UISwitch吗?谢谢!

while (i < numberOfAnswers) {
    UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, y+spaceBetweenAnswers-5, 0, 30)];
    mySwitch.tag = i;
    [_answerView addSubview:mySwitch];        
    i++;        
 }

4 个答案:

答案 0 :(得分:3)

我认为如果你保留对交换机的引用会更好。

NSMutableArray *switches = [NSMutableArray array]; // You can do that as property

while (i < numberOfAnswers) {
    UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, y+spaceBetweenAnswers-5, 0, 30)];
    mySwitch.tag = i;
    [_answerView addSubview:mySwitch];
    i++;

    [switches addObject:mySwitch];
 }

之后您不必遍历视图中的每个子视图,但您可以只迭代switch数组。

int count = 0;

for (UISwitch *switch in switches)
{
    if (switch.isOn)
    {
        count += 1;
    }
}

答案 1 :(得分:1)

我喜欢Piotr的解决方案,但如果您真的只想知道有多少开关,您也可以将此行添加到初始化循环中:

[mySwitch addTarget:self action:@selector(switchValueDidChange:) forControlEvents:UIControlEventValueChanged];

为您的班级添加一个属性:

@property (nonatomic) int onCounts

然后这个方法:

-(void)switchValueDidChange:(UISwitch)sender {
    self.onCounts = sender.on ? self.onCounts + 1 : self.onCounts - 1;
}

现在,您可以随时访问onCount属性,以了解已启用的交换机数量。

答案 2 :(得分:0)

尝试

int count = 0;
for (UIView *subview in _answerView.subviews) {
    if ([subview isKindOfClass:[UISwitch class]]) {
        UISwitch *sw = (UISwitch*)subview;
        count += sw.isOn ? 1 : 0;
    }
}

答案 3 :(得分:0)

这里是你的代码

int count = 0;
for (int i = start_switch_tag;i< numberOfAnswers;i++) {
    if (((UISwitch *)[_answerView viewWithTag:i]).isOn) count ++;
}
NSLog(@"number of switches set ON: %d", count);