Подтвердить что ты не робот

Каков наилучший способ сделать флажок UIButton?

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

Сначала я попробовал подклассу UIButton, но UIButton не имеет метода -init*** для использования в моем методе -init.

Каков наилучший способ сделать это?

Спасибо заранее.

4b9b3361

Ответ 1

Вам не нужно подклассифицировать класс UIButton. По дизайну Objective-C выступает за композицию над наследованием.

UIButton является подклассом UIControl, который имеет свойство selected. Вы можете использовать это свойство, чтобы переключать действие включения/выключения флажка, точно так же, как это делает UISwitch.

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

// when you setup your button, set an image for the selected and normal states
[myCheckBoxButton setImage:checkedImage forState:UIControlStateSelected];
[myCheckBoxButton setImage:nonCheckedImage forState:UIControlStateNormal];

- (void)myCheckboxToggle:(id)sender
{
    myCheckboxButton.selected = !myCheckboxButton.selected; // toggle the selected property, just a simple BOOL
}

Ответ 2

Задайте изображения на кнопке:

[button setImage:uncheckedImage forState:UIControlStateNormal]
[button setImage:checkedImage forState:UIControlStateSelected]

Теперь вам нужно всего лишь:

button.selected = state

и отобразятся правильные изображения.

Ответ 3

Все, что вам нужно сделать, - установить 2 разных изображения для состояний UIControlStateNormal и UIControlStateSelected, затем в вашем селекторе изменилось свойство selected кнопки.

Вот рабочий пример (замените имена изображений собственными):

- (void)loadView {
    // ...
    UIButton *chkBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [chkBtn setFrame:CGRectMake(0, 0, 300, 25)];

    [chkBtn setImage:[UIImage imageNamed:@"UNCHECKED.png"] 
            forState:UIControlStateNormal];
    [chkBtn setImage:[UIImage imageNamed:@"CHECKED.png"]
            forState:UIControlStateSelected];

    [chkBtn addTarget:self 
               action:@selector(chkBtnHandler:) 
     forControlEvents:UIControlEventTouchUpInside];

    // Optional title change for checked/unchecked
    [chkBtn setTitle:@"I am NOT checked!"
            forState:UIControlStateNormal];
    [chkBtn setTitle:@"I am checked!"
            forState:UIControlStateSelected];

    [self.view addSubview:chkBtn];
    [chkBtn release], chkBtn = nil;
    // ...
}

- (void)chkBtnHandler:(id)sender {
    // If checked, uncheck and visa versa
    [(UIButton *)sender setSelected:![(UIButton *)sender isSelected]];
}

Ответ 4

Для всех, кто интересуется будущим - вместо того, чтобы делать это самостоятельно, просто загрузите ссылку ниже из GitHub, и она уже подклассифицирована из UIControl и отлично функционирует как флажок. Также включает примерный проект о том, как легко его использовать:

https://github.com/Brayden/UICheckbox

Ответ 6

Вы пытались переопределить метод initWithCoder, на случай, если он каким-то образом загрузится из nib?

Ответ 7

    UIImage* nonCheckedImage=[UIImage imageNamed:@"ic_check_box_outline_blank_grey600_48dp.png"];//[UIImage init
    UIImage* CheckedImage=[UIImage imageNamed:@"ic_check_box_black_48dp.png"];//[UIImage init

    //ic_check_box_black_48dp.png
    [_checkBox setImage:CheckedImage forState:UIControlStateSelected];
    [_checkBox setImage:nonCheckedImage forState:UIControlStateNormal];
}

- (IBAction)checkBoxToggle:(id)sender {
    _checkBox.selected = !_checkBox.selected; // toggle the selected property, just a simple BOOL

}

изображение, которое вы можете использовать значок google

Ответ 8

Попробуйте следующее: -

-(IBAction)clickCheckButton:(UIButton *)sender {

    if (sender.tag==0) {

    sender.tag = 1;

    [sender setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal]; 

    }else

    {

    sender.tag = 0;

    [sender setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; } } sender.tag = 0;

    [sender setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];

    } 
}

Ответ 9

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