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

У меня есть 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;

В чем дело?


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


Ответы (2)


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

- (void)didTapCheckbox:(id)sender {
    UIButton *btn =(UIButton *)sender;
    if (btn.selected == YES) {
        [btn setSelected:NO];
    }
    else{
        [btn setSelected:YES];
    }
}
person BHASKAR    schedule 12.08.2014
comment
Это не решило мою проблему... Этот результат исключает возможность того, что выбранное свойство будет неправильным. Спасибо за информацию! - person Owen Pierce; 12.08.2014
comment
вы пишете свой код кнопки в tableView:viewForFooterInSection: поэтому, когда устройство переходит в ландшафтный режим, оно вызывает больше, поэтому создается новая кнопка. По этой причине вы сталкиваетесь с этой проблемой - person BHASKAR; 12.08.2014

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

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