Преглеждам няколко урока, които описват начини за прилагане на персонализирани изображения към UIButtons в програмирането на iPhone с помощта на Obj-C.
Един метод, който харесвам, е да поставя UIButton (Round Rect Button) на XIB с помощта на Interface Builder, след което в метода 'viewDidLoad' на контролера за изглед на XIB, кожата на бутона по следния начин:
UIImage *ButtonImageNormal = [UIImage imageNamed:@"button_blue.png"];
UIImage *StretchableButtonImageNormal = [ButtonImageNormal stretchableImageWithLeftCapWidth:24 topCapHeight:24];
[self.Button setBackgroundImage:StretchableButtonImageNormal forState:UIControlStateNormal];
UIImage *ButtonImagePressed = [UIImage imageNamed:@"button_orange.png"];
UIImage *StretchableButtonImagePressed = [ButtonImagePressed stretchableImageWithLeftCapWidth:24 topCapHeight:24];
[self.Button setBackgroundImage:StretchableButtonImagePressed forState:UIControlStateHighlighted];
Проблемът с този метод е, че бутонът не губи фона си „Round Rect“ и отстрани на бутоните все още можете да видите бялото на бутона „Round Rect“, което наднича през персонализираните изображения.
Ако обаче създам персонализиран бутон от нулата, използвайки този код:
UIButton *CustomButton = [UIButton buttonWithType:UIButtonTypeCustom];
[CustomButton setFrame:CGRectMake(20, 100, 280, 45)];
[CustomButton.titleLabel setFont:[UIFont boldSystemFontOfSize:15]];
[CustomButton setTitle:@"Custom Button" forState:UIControlStateNormal];
[CustomButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[CustomButton setBackgroundImage:[UIImage imageNamed:@"button_blue.png"] forState:UIControlStateNormal];
[CustomButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
[CustomButton setBackgroundImage:[UIImage imageNamed:@"button_orange.png"] forState:UIControlStateHighlighted];
[self.view addSubview:CustomButton];
Няма такъв бял фон, който да наднича.
Наистина бих искал да използвам метода „Round Rect“ за поставяне и отстраняване на бутони, защото бих искал да видя техните позиции в Interface builder. Има ли метод, който трябва да използвам, или свойство, което трябва да променя, за да се отърва от белия фон на бутон „Round Rect“ в кода.
Ето изображение, показващо проблема: