我有这种方法。有什么方法可以计算出设置的UISwitch吗?谢谢!
while (i < numberOfAnswers) {
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, y+spaceBetweenAnswers-5, 0, 30)];
mySwitch.tag = i;
[_answerView addSubview:mySwitch];
i++;
}
答案 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);