Предыдущие переключатели состояния не очищены цель c - PullRequest
0 голосов
/ 13 июня 2019

Я создаю пользовательскую кнопку-переключатель, и я должен иметь возможность выбрать только одну кнопку-переключатель, и если я нажму на следующую кнопку-переключатель, я смогу отменить выбор ранее выбранной кнопки-переключателя.

Вот мой код:

 - (void)setupBtn{
        self.radioBtn = [UIButton buttonWithType: UIButtonTypeCustom];
        [self.radioBtn setFrame:CGRectMake(40,38,18,18)];
        [self.radioBtn setImage: [UIImage imageNamed:@"radio-button"]forState:UIControlStateNormal];
        [self.radioBtn setImage: [UIImage imageNamed:@"radio-button-select"]forState: UIControlStateSelected];
        [self.radioBtn addTarget:self action:@selector(radioButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
        [self.view2 addSubview:self.radioBtn];

    }
    - (IBAction)radioButtonTapped:(UIButton*)sender{
        if (self.radioBtn.isSelected ==  true) {
            [self.radioBtn setSelected:NO];
            self.view1.backgroundColor =[UIColor clearColor];
            [self.radioBtn setImage:[UIImage imageNamed:@"radio-button"] forState:UIControlStateNormal];
        }else {
            [self.radioBtn setSelected:YES];
            self.view1.backgroundColor = [UACFCustomColors continentalLightBlueTransparent];
            [self.radioBtn setImage:[UIImage imageNamed:@"radio-button-select"] forState:UIControlStateSelected];
        }
    }

1 Ответ

0 голосов
/ 13 июня 2019

Попробуйте сохранить все ваши кнопки в массиве.Когда кто-то нажал, прокрутите массив и проверьте, выбрана ли каждая кнопка.Если кнопка выбрана, установите для нее значение not, затем выйдите из цикла.После цикла установите кнопку, которая была нажата (sender) для выбора.

Не проверенный пример кода:

- (void) viewDidLoad {
    self.radioBtn = [UIButton buttonWithType: UIButtonTypeCustom];
    [self.radioBtn setFrame:CGRectMake(40,38,20,20)];
    [self.radioBtn setImage: [UIImage imageNamed:@"radio-button"]forState:UIControlStateNormal];
    [self.radioBtn setImage: [UIImage imageNamed:@"radio-button-select"]forState: UIControlStateSelected];
    [self.radioBtn addTarget:self action:@selector(myButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [self.radioBtn setSelected:YES];
    [self.view2 addSubview:self.radioBtn];

    self.radioBtn2 = [UIButton buttonWithType: UIButtonTypeCustom];
    [self.radioBtn2 setFrame:CGRectMake(40,38,20,20)];
    [self.radioBtn2 setImage: [UIImage imageNamed:@"radio-button"]forState:UIControlStateNormal];
    [self.radioBtn2 setImage: [UIImage imageNamed:@"radio-button-select"]forState: UIControlStateSelected];
    [self.radioBtn2 addTarget:self action:@selector(myButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [self.radioBtn2 setSelected:NO];
    [self.view2 addSubview:self.radioBtn2];

    self.radioBtn3 = [UIButton buttonWithType: UIButtonTypeCustom];
    [self.radioBtn3 setFrame:CGRectMake(40,38,20,20)];
    [self.radioBtn3 setImage: [UIImage imageNamed:@"radio-button"]forState:UIControlStateNormal];
    [self.radioBtn3 setImage: [UIImage imageNamed:@"radio-button-select"]forState: UIControlStateSelected];
    [self.radioBtn3 addTarget:self action:@selector(myButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [self.radioBtn3 setSelected:NO];
    [self.view2 addSubview:self.radioBtn3];
    self.buttonArray = @[self.radioBtn, self.radioBtn2, self.radioBtn3];

}

- (void) myButtonTapped:(UIButton*) sender {
    for(UIButton *btn in self.buttonArray) {
        // Only one button should be selected at a time, so once we find it,
        // set it to not be selected then break from the loop
        if(btn.isSelected){
            [btn setSelected:NO];
            break;
        }
    }
    // set the button that was tapped to be selected
    [sender setSelected:YES];
}

Отправить текст одной кнопки другой кнопке довольно просто.

[btn2 setTitle:[btn1 titleForState:UIControlStateNormal] forState:UIControlStateNormal];  
...