2015-06-25 7 views
1

У меня есть UIButton с другим изображением для обычного и выбранного состояния. Также мне нужно изменить оттенок кнопки в зависимости от темы приложения.Избегайте перевернутых цветов UIButton, если выбрано

Но когда я устанавливаю кнопку в выбранное состояние для переключения изображения, оно инвертирует его цвета.

- (void)setLike:(BOOL)selected { 
    self.likeButton.selected = selected; 
    if (selected) { 
     self.likeButton.tintColor = [Theme getTintColor]; 
    } else { 
     self.likeButton.tintColor = [Theme getLightColor]; 
    } 
} 

Нормальное состояние

enter image description here

Actual Выбранный

enter image description here

Желаемая Selected

enter image description here

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

- (void)setLike:(BOOL)selected { 
    if (selected) { 
     [self.likeButton setImage:[UIImage imageNamed:@"Liked"] forState:UIControlStateNormal]; 
     self.likeButton.tintColor = [Theme getTintColor]; 
    } else { 
     [self.likeButton setImage:[UIImage imageNamed:@"Like"] forState:UIControlStateNormal]; 
     self.likeButton.tintColor = [Theme getLightBaseColor]; 
    } 
} 
+1

Вам не нужно вручную изменять изображение, когда кнопка выбрана (или выделена). По настройкам различных изображений для UIControlStateNormal, UIControlStateHighlighted, UIControlStateSelected вы можете получить нужное поведение! – Groot

+1

Вот как я это сделал. Но когда я меняю его на выбранный так, чтобы он отображал изображение UIControlStateSelected, iOS инвертирует мои цвета. –

ответ

0

Я попытался бы отслеживать состояние в свойстве и затем иметь дополнительные свойства для возврата правильного изображения для текущего состояния. Затем вы можете установить их на viewDidLoad или viewDidAppear.

Я не знаю вашу точную ситуацию, так что вот пример.

Пример:

@property (nonatomic) BOOL isLiked; 
... 
- (void)viewDidAppear { 
    // likeButton 
    [self.likeButton setBackgroundImage:[self imageForCurrentState] forState:UIControlStateNormal]; 
} 
... 
- (UIImage)imageForCurrentState { 
    if (isLiked) { 
     return [UIImage imageNamed:@"Liked"]; 
    } else { 
     return [UIImage imageNamed:@"Like"]; 
    } 
} 
0
  1. В Interface Builder вы найдете кнопку, и изменить его Type от System к Custom. Это должно устранить эффект увеличения изображения & для выбранного статуса.
  2. Откройте файл Assets, в котором определены оба изображения для Normal и Selected status. Установите Render As для обычного изображения на Original Image, а для выбранного изображения - Template Image. Это должно привести к тому, что приложение по умолчанию будет отображаться только в выбранном состоянии.