iPhone SDK - UIButton выделил вопрос о состоянии - PullRequest
2 голосов
/ 20 августа 2011

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

У меня есть код:

UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(horizontalOffset+buttonWidth, verticalOffset, buttonWidth, buttonHeight)];
    [likeButton setImage:[UIImage imageNamed:@"like-off.png"] forState:UIControlStateNormal];
    [likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateHighlighted];
    [likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateSelected];
    [likeButton addTarget:self action:@selector(likeButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

, который запускает метод:

-(void)likeButtonPressed:(id)sender {
    UIButton *button = (UIButton *)sender; 
    [button setSelected:!button.selected];
}

Поведение, которое я вижу, заключается в том, что когда я нажимаю кнопку (и выделяю ее), она работает, как ожидалось, и изображение 'like-on.png' используется для выделенного состояния и остается включенным в состоянии 'selected' .

Однако, когда я снова нажимаю кнопку, чтобы выключить ее, я вижу выделенное серым цветом состояниекогда я нажимаю на палец.Когда я отпускаю палец, я вижу, что 'like-off' изображение отображается, как и ожидалось.

Мне бы хотелось не видеть выделенное серым цветом состояние, когда я нажимаю палец на кнопке, когда я отключаю ее. Вместо этого я хотел бы убедиться, что выделенное состояниеon выключение использует изображение 'like-on.png' , как указано в коде.

Что здесь происходит?Любые идеи, где мой код может быть неправильным?

Большое спасибо, Бретт

Ответы [ 2 ]

8 голосов
/ 20 августа 2011

Вам не хватает изображения для выбранного выделенного состояния и :

[likeButton setImage:[UIImage imageNamed:@"like-on.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

Если вы не установите его, используется изображение нормального состояния.Из документации -[UIButton setImage:forState:]:

Как правило, если свойство не указано для состояния, по умолчанию используется значение UIControlStateNormal.

Если вы не используетене хотите, чтобы ваши изображения были изменены, когда они выделены, установите:

likeButton.adjustsImageWhenHighlighted = NO;
0 голосов
/ 20 августа 2011

Я думаю, что свойство selected UIButton предназначено для чего-то другого (подумайте об интерфейсе рабочего стола).

Было бы более логичным изменить значение для всех состояний в соответствии с BOOL, который отслеживает, включен он или выключен.

Таким образом,

-(void)likeButtonPressed:(id)sender {
    UIButton *button = (UIButton *) sender;
    liking = !liking;
    if (liking) {
        // configure the four states with "like-on" and other images
    }
    else {
        // configure the four states with "like-off"
    }
}

В противном случае вы использовали бы состояние элемента пользовательского интерфейса для представления логики вашей программы, что в принципе некорректно.Единственный случай, когда это приемлемо (но не совсем), это UISwitch.

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