2015-09-08 18 views
1

У меня есть UIButtons, что я пытался установить изображения в aspectFit. Однако при использовании раскадровки я столкнулся с некоторыми трудностями я наследнике UIButton и программно установить на imageViews кнопок для ScaleAspectFitUIButton backgroundImage против изображения

#import "UIButtonWithImageAspectFit.h" 

@implementation UIButtonWithImageAspectFit 

-(void)awakeFromNib{ 
    [self.imageView setContentMode:UIViewContentModeScaleAspectFit]; 
} 

@end 

Это работало хорошо и кнопки изображения отображаются красиво.

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

[_firstLetterButton setImage:[UIImage imageNamed:@"2CeadLitir.png"]]; 

Но это не работает так, согласно проконсультировать здесь я должен использовать:

[_firstLetterButton setBackgroundImage:[UIImage imageNamed:@"2CeadLitir.png"] forState:UIControlStateNormal]; 

который добавляет изображение как backgroundImage к кнопке. Теперь у меня есть изображения в кнопке.

  1. что масштабируется хорошо, как свойство изображения кнопки,
  2. и другая, который не масштабируется хорошо, как фоновое изображение отображается позади.

Так что я вернулся к подклассу UIButtonUIButtonWithImageAspectFit и попытался изменить его так, что он устанавливает contentMode в BackgroundImage, а не образ

Но это, кажется, не имеют свойство BackgroundImage, что я может получить доступ, но в соответствии с документацией у него есть

currentBackgroundImage 
Property 

Однако я не могу использовать тот же метод setContentMode на что currentBackgroundImage

Любые идеи, как обойти это?

ответ

1

На самом деле UIButton имеет метод

- (void)setImage:(UIImage *)image 
     forState:(UIControlState)state 

так Все, что мне нужно сделать, было установить состояние при настройке изображения на UIButton, а не на UIButton.imageView

3

Вы должны рассмотреть этот Иллюстрация с веб-сайта Apple. enter image description here

От Buttons tutorial. В частности, это:

государственный
Кнопка имеет четыре состояния, чтобы настроить внешний вид по-умолчанию выделен, выбран, и инвалидов. И форма

UIButton class reference

Обсуждение
В общем, если свойство не задано для государства, то по умолчанию используется значение UIControlStateNormal. Если значение UIControlStateNormal не установлено, то по умолчанию значение по умолчанию соответствует системному значению.Поэтому, как минимум, вы должны установить значение для нормального состояния.

А вот information about different UIControlState:

Всей эта ссылкой является обязательным чтением для начинающего IOS Developer.