В настоящее время (начиная с версии 4.5) ограничение InterfaceBuilder. Однако необходимость создавать IBOutlet
для каждой кнопки и вручную указывать, что изображение растягивается в viewDidLoad
, не является отличным решением, если только по каким-либо причинам оно не делает создание пользовательского интерфейса более громоздким и более хрупким.
Вместо этого давайте создадим подкласс UIButton
, который по умолчанию сделает любое фоновое изображение растягиваемым. В этом примере я растягиваю только нормальное и подсвеченное фоновое изображение. Для готового к работе класса вы, вероятно, захотите проверить все состояний фоновых изображений и изображений переднего плана и растянуть их.
@implementation NTSTButton
- (id) initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
/* There is no support in IB for stretchable images. So, let's
make sure _any_ background image assigned to this button
stretches correctly.
Note: Setting the stretch cap to 10px, which should work with
almost all button background images.
*/
UIImage *normalImage =
[[self backgroundImageForState:UIControlStateNormal]
stretchableImageWithLeftCapWidth:10 topCapHeight:10] ;
UIImage *highlightedImage =
[[self backgroundImageForState:UIControlStateHighlighted]
stretchableImageWithLeftCapWidth:10 topCapHeight:10] ;
[self setBackgroundImage:normalImage
forState:UIControlStateNormal];
[self setBackgroundImage:highlightedImage
forState:UIControlStateHighlighted];
}
return self;
}
@end