0

how do I set 1 checkbox always checked when all other check boxes are not selected the below code I used is perfectly fine but Iam unable to set 1 checkbox selected

     int x=0;

    checkbox1 = [[UIButton alloc] initWithFrame:CGRectMake(350,600+x,50,50)];

    [checkbox1 setBackgroundImage:[UIImage imageNamed:@"checkboxunchecked.png"]forState:UIControlStateNormal];
    [checkbox1 setBackgroundImage:[UIImage imageNamed:@"checked.png"]forState:UIControlStateSelected];
    [checkbox1 setBackgroundImage:[UIImage imageNamed:@"checked.png"]forState:UIControlStateHighlighted];

    checkbox1.adjustsImageWhenHighlighted=NO;
    checkbox1.tag=1;
    [checkbox1 addTarget:self action:@selector(checkboxSelectedMethod:) forControlEvents:UIControlEventTouchUpInside ];
    [self.view addSubview:checkbox1];
    x+=checkbox1.frame.size.width*1.5;


    checkbox2 = [[UIButton alloc] initWithFrame:CGRectMake(350,600+x,50,50)];

    [checkbox2 setBackgroundImage:[UIImage imageNamed:@"checkboxunchecked.png"]forState:UIControlStateNormal];
    [checkbox2 setBackgroundImage:[UIImage imageNamed:@"checked.png"]forState:UIControlStateSelected];
    [checkbox2 setBackgroundImage:[UIImage imageNamed:@"checked.png"]forState:UIControlStateHighlighted];

    checkbox2.adjustsImageWhenHighlighted=NO;
    checkbox2.tag=1;
    [checkbox2 addTarget:self action:@selector(checkboxSelectedMethod:) forControlEvents:UIControlEventTouchUpInside ];
    [self.view addSubview:checkbox2];
    x+=checkbox2.frame.size.width*1.5;

similarly 2 more buttons are there total there are 4 buttons, first button should get selected if other 3 are not selected

-(void)checkboxSelectedMethod:(id)sender
{
UIButton *btn = (UIButton *) sender;
if([checkbox1 isSelected])
{
    [btn setSelected:NO];

}
else{

    [btn setSelected:YES];
}
if([checkbox2 isSelected])
{
    [btn setSelected:NO];
}
else{
    [btn setSelected:YES];
}

}

user2776957
  • 25
  • 1
  • 8

1 Answers1

0

It will be much easier if you use an array to store your buttons rather than discrete variables -

@property (strong,nonatomic) NSMutableArray *checkboxes;
@property (strong,nonatomic) UIImage *checkedImage;
@property (strong,nonatomic) UIImage *checkedImage;
@property (strong,nonatomic) NSMutableIndexSet *selectedSet;


int x=0;

self.uncheckedImage=[UIImage imageNamed:@"checkboxunchecked.png"];
self.checkedImage=[UIImage imageNamed:@"checked.png"];

self.selectedSet=[NSMutableIndexSet new];      //Indexset to store selected buttons

self.checkboxes=[NSMutableArray new];

for (int i=0i;i<3;i++) {
    UIButton *checkbox = [[UIButton alloc] initWithFrame:CGRectMake(350,600+x,50,50)];

    [checkbox setBackgroundImage:uncheckedImage forState:UIControlStateNormal];
    [checkbox setBackgroundImage:checkedImage forState:UIControlStateSelected];
    [checkbox setBackgroundImage:uncheckedImage forState:UIControlStateHighlighted];

    checkbox.adjustsImageWhenHighlighted=NO;
    checkbox.tag=i;
    [checkbox addTarget:self action:@selector(checkboxSelectedMethod:) forControlEvents:UIControlEventTouchUpInside ];
    [self.view addSubview:checkbox];
    [self.checkboxes addObject:checkbox];
    x+=checkbox.frame.size.width*1.5;
}

Now you can check if sender is in the index set (selected) and remove it if the count in the set is >1 (more than one box selected). If not in the set then it is not selected, so select it and add it to the set

-(void)checkboxSelectedMethod:(id)sender
{
    UIButton *btn = (UIButton *) sender;

    NSInteger buttonIndex=btn.tag;

    if ([self.selectedSet containsIndex:buttonIndex]) {
       if (self.selectedSet.count > 1) {
          [self.selectedSet removeIndex:buttonIndex];
          [btn setSelected:NO];
       }
    } else {
       [btn setSelected:YES];
       [self.selectedSet addIndex:buttonIndex];
    }
}
Paulw11
  • 108,386
  • 14
  • 159
  • 186