2013-08-14 2 views
1

Мне нужно использовать флажки (вместо UISwitch), так как в конце концов они будут напечатаны на листе. Я использую следующий код для инициализации чек коробкаiOS - Обработка нескольких флажков

checkbox1 = [[UIButton alloc] initWithFrame:CGRectMake(40, 226.5, 134, 20)]; 
[checkbox1 setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
[checkbox1 setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 
[checkbox1 addTarget:self action:@selector(checkboxSelected:) forControlEvents:UIControlEventTouchUpInside]; 
[self addSubview:checkbox1]; 

и следующий код для обработки Переключатель

-(void)checkboxSelected:(id)sender { 

if([checkbox1 isSelected]==YES) { 
    [checkbox1 setSelected:NO]; 
} else { 
    [checkbox1 setSelected:YES]; 
} 

Все это работает прекрасно. , , когда я имею дело с 1 флажком. , , но если я хочу сказать, что 10 флажков на одной странице - мне нужно создать 10 отдельных методов?

Это просто кажется расточительным. , .. есть ли лучший способ добиться этого?

Спасибо за вашу помощь

+0

Вы можете создать свой собственный контроль (пользовательский класс). –

ответ

4

У вас может быть одинаковый метод для всех флажков. Параметр Sender в методе checkboxSelected является UIButton, что вызвало действие, поэтому он будет похлопал флажок в вашем случае:

-(void)checkboxSelected:(UIButton*)sender { 
    sender.selected = !sender.selected; 
} 
+1

Нет необходимости устанавливать тег кнопки, пока мы создаем кнопку наподобие par above question .? с вами ответ.? –

+0

Спасибо: это на самом деле отлично, он работает! но не могли бы вы объяснить это немного, чтобы я мог принять ваш ответ? - Что происходит на 'sender.selected =! sender.selected'? –

+1

@NitinGohel, вам не нужен тег, если вы просто хотите изменить выбранное состояние. Но вам может понадобиться это, когда вы будете получать выбранные состояния позже для будущей обработки, которые могут зависеть от структуры ваших данных. – Vladimir

1

вы должны управлять кнопки Иви флажок, жгутов один метод с помощью тега: -

Lat говорят, что вы тару 10 Buttong с ForLoop

for(i=0;i<10;i++) 
{ 
checkbox1 = [[UIButton alloc] initWithFrame:CGRectMake(40, 226.5, 134, 20)]; 
[checkbox1 setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
[checkbox1 setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 
checkbox1.tag=i; 
[checkbox1 setSelected:NO]; 
[checkbox1 addTarget:self action:@selector(checkboxSelected:) forControlEvents:UIControlEventTouchUpInside]; 
[self addSubview:checkbox1]; 
} 

-(void)checkboxSelected:(UIButton*)sender { 
    UIButton *btnPly = (UIButton *)sender; 
    if([btnPly isSelected]==YES) { 
     [btnPly setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
     [btnPly setSelected:NO]; 
    } else { 
     [btnPly setSelected:YES]; 
     [btnPly setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 

    } 
} 
+0

Прошу прощения, я думаю, что мои орфографические ошибки могли вызвать некоторую путаницу. , , , не могли бы вы снова взглянуть на вопрос? что, если кнопки должны быть расположены на разных CG-координатах? –

+0

этот вышеописанный метод установленный 10 отдельно установленный флажок кнопки, но о позиции CG-cordinates вам нужно установить его как пар, в котором вы нуждаетесь, для forLoop –

1

попробуйте этот

for(i=0;i<10;i++) 
{ 
HTN = [[UIButton alloc] initWithFrame:CGRectMake(40, 226.5, 134, 20)]; 
[HTN setBackgroundImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
[HTN setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 
HTN.tag=i; 
[HTN addTarget:self action:@selector(checkboxSelect:) forControlEvents:UIControlEventTouchUpInside]; 
[self addSubview:checkbox1]; 
} 

и для проверки, выбрано или нет

-(void)checkboxSelect:(UIButton*)sender { 
    sender.selected = !sender.selected; 
} 
Смежные вопросы