Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Изображение выбранного состояния UIButton зависает при авторотации

Автор вопроса: Owen PierceОтветов: 2

У меня есть UIButton в нижнем колонтитуле UITableView. Он имеет пустой флажок в качестве невыбранного состояния и флажок в качестве выбранного состояния. Он отлично работает в портретной ориентации, но если вид когда-либо поворачивается в альбомную, изображение кнопки останавливается в том состоянии, в котором оно было при повороте. Кнопка по-прежнему корректно отправляет сообщения после поворота, но изображение не меняется.

self.theButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.theButton setImage:checkbox
                forState:UIControlStateNormal];
[self.theButton setImage:checkedBox
                forState:UIControlStateSelected];

Этот код появляется в tableView:viewForFooterInSection: моего контроллера представления. В действии, связанном с кнопкой, я установил self.theButton.selected = !self.theButton.selected;

В чем дело?

  • Этот код очень подозрительный: self.theButton.selected = !self.theButton.selected Не следует манипулировать состоянием выбора из обработчика, который вызывается вместе с выбором. Sergey Kalinichenko 12.08.2014
  • Без этого кода выбранное состояние кнопки вообще не меняется, а отображаемое изображение всегда является состоянием UIControlStateNormal. Owen Pierce 12.08.2014

iosobjective-cuitableviewuibuttonautorotate

Ответы

Ответ 1 · BHASKAR

Вы можете сделать это в своем действии кнопки

- (void)didTapCheckbox:(id)sender {
    UIButton *btn =(UIButton *)sender;
    if (btn.selected == YES) {
        [btn setSelected:NO];
    }
    else{
        [btn setSelected:YES];
    }
}

Ответ 2 · BHASKAR

вместо вашего кода просто сделайте это

if(self.theButton == nil){
    self.theButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.theButton setImage:checkbox
            forState:UIControlStateNormal];
    [self.theButton setImage:checkedBox
            forState:UIControlStateSelected];
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы