Каков наилучший способ сделать флажок UIButton? - PullRequest
11 голосов
/ 09 февраля 2010

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

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

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

Заранее спасибо.

Ответы [ 9 ]

42 голосов
/ 09 февраля 2010

Вам не нужно создавать подкласс класса 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
}
7 голосов
/ 21 октября 2011

Установите изображения в кнопке:

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

Теперь все, что вам нужно сделать, это:

button.selected = state

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

5 голосов
/ 25 января 2012

Все, что вам нужно сделать, это установить 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:(UIButton *)sender {
    // If checked, uncheck and visa versa
    [sender setSelected:!sender isSelected];
}
4 голосов
/ 18 июля 2012

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

https://github.com/Brayden/UICheckbox

1 голос
/ 02 августа 2014

Я использовал M13Checkbox в одном из моих проектов. Работает нормально.

https://github.com/Marxon13/M13Checkbox

0 голосов
/ 24 ноября 2016

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

0 голосов
/ 18 декабря 2014

Попробуйте это: -

-(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];

    } 
}
0 голосов
/ 28 ноября 2014
    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

0 голосов
/ 09 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...