Избегайте повторения кода при кодировании кнопок UIB в iOS - PullRequest
1 голос
/ 10 сентября 2011

Я довольно новичок в программировании для iOS и Objective-C в целом, поэтому этот вопрос, вероятно, несколько раз задавался тихо.В любом случае:

В моем приложении для iOS у меня есть несколько кнопок UIB, которые я создаю следующим образом:

UIButton *webButton = [UIButton buttonWithType:UIButtonTypeCustom];
[webButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
webButton.frame = CGRectMake(10, 315, 300, 44);
[webButton setBackgroundImage:[UIImage imageNamed:@"WebButton.png"] forState:UIControlStateNormal];
[webButton setBackgroundImage:[UIImage imageNamed:@"WebButtonPressed.png"] forState:UIControlStateHighlighted];

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

UILabel *webLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 14, 300, 15)];
webLabel.text = @"Some website";
webLabel.font = [UIFont boldSystemFontOfSize:16.0];
webLabel.textColor = [UIColor colorWithRed:62.0 / 255 green:135.0 / 255 blue:203.0 / 255 alpha:1];
webLabel.textAlignment = UITextAlignmentCenter;
webLabel.backgroundColor = [UIColor clearColor];
[webButton addSubview:webLabel];
[webLabel release];

Это становится очень утомительным, когда вам приходится проходить эту процедуру каждый раз, когда вы хотите создать новуюкнопка.Как лучше всего упростить этот процесс, чтобы мне не приходилось повторяться снова и снова при кодировании кнопок?

Спасибо.

1 Ответ

2 голосов
/ 10 сентября 2011

Я подозреваю, что вы хотите создать подкласс UIButton. Таким образом, вы пишете свой код один раз, но используете его для любого количества кнопок. Примерно так:

// in your .h file

#import <UIKit/UIKit.h>
@interface WebButton : UIButton
+ (WebButton*) webButtonWithBackgroundImageNamed: (NSString*) imageName title: (NSString*) string andTarget: (id) target;
@end

// in your .m file
#import "WebButton.h"
@implementation WebButton

+ (WebButton*) webButtonWithBackgroundImageNamed: (NSString*) imageName title: (NSString*) string andTarget: (id) target;
{
    WebButton *webButton = [WebButton buttonWithType:UIButtonTypeCustom];
    [webButton addTarget:target action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    webButton.frame = CGRectMake(0, 0, 300, 44);
    [webButton setBackgroundImage:[UIImage imageNamed: imageName] forState:UIControlStateNormal];
    [webButton setBackgroundImage:[UIImage imageNamed: [NSString stringWithFormat:@"%@pressed", imageName]] forState:UIControlStateHighlighted];

     UILabel *webLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 14, 300, 15)];
     webLabel.text = string;
     webLabel.font = [UIFont boldSystemFontOfSize:16.0];
     webLabel.textColor = [UIColor colorWithRed:62.0 / 255 green:135.0 / 255 blue:203.0 / 255 alpha:1];
     webLabel.textAlignment = UITextAlignmentCenter;
     webLabel.backgroundColor = [UIColor clearColor];
     [webButton addSubview:webLabel];
     [webLabel release];

     return webButton;
}

А затем создать и добавить кнопку в представление примерно так:

WebButton* webButton = [WebButton webButtonWithBackgroundImageNamed:@"WebButton" title:@"testing" andTarget:self];
CGRect webButtonFrame = [webButton frame];
webButtonFrame.origin.x = 10;
webButtonFrame.origin.y = 30;
[webButton setFrame:webButtonFrame];
[[self window] addSubview:webButton];
...