ios

快速创建UILabel, UIButton, UITedtFie

2017-11-17  本文已影响10224人  Thinkdifferents

链式编程创建view,优雅而又快捷

正常写法


    UILabel *label = [[UILabel alloc] init];
    label.frame = CGRectMake(100, 100, 100, 30);
    label.text = @"label";
    label.font = [UIFont systemFontOfSize:14];
    label.textColor = [UIColor clearColor];
    label.textAlignment = NSTextAlignmentLeft;
    label.numberOfLines = 1;
    label.backgroundColor = [UIColor clearColor];
    label.lineBreakMode = NSLineBreakByWordWrapping;
    label.shadowColor = [UIColor blackColor];
    label.shadowOffset = CGSizeMake(0, 0);
    [self.view addSubview:label];
    
    UIView *view = [[UIView alloc] init];
    view.frame = CGRectMake(100, 100, 60, 30);
    view.backgroundColor = [UIColor redColor];
    [self.view addSubview:view];
    
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(100, 100, 60, 30);
    [button setTitle:@"button" forState:UIControlStateNormal];
    button.titleLabel.font = [UIFont systemFontOfSize:14];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
    [button setImage:[UIImage imageNamed:@"image"] forState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:@"image"] forState:UIControlStateSelected];
    [button setBackgroundImage:[UIImage imageNamed:@"image"] forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:@"image"] forState:UIControlStateSelected];
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
    button.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
    button.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
    button.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
    [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    
    UITextField *textField = [[UITextField alloc] init];
    textField.placeholder = @"placeholder";
    textField.borderStyle = UITextBorderStyleNone;
    textField.clearsOnBeginEditing = true;
    textField.secureTextEntry = true;
    textField.clearsOnBeginEditing = true;
    textField.returnKeyType = UIReturnKeyDefault;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    textField.leftView = [UIView new];
    textField.leftViewMode = UITextFieldViewModeAlways;
    textField.clearButtonMode = UITextFieldViewModeAlways;
    [self.view addSubview:textField];

开挂写法

+ (UILabel)labelWithText:(NSString *)text
                    Font:(UIFont *)font
               TextColor:(UIColor *)textColor
           TextAlignment:(NSInteger)textAlignment
           NumberOfLines:(NSInteger)numberOfLines
         BackgroundColor:(UIColor *)backgroundColor
           LineBreakMode:(NSInteger)lineBreakMode
             ShadowColor:(UIColor *)shadowColor
            ShadowOffset:(CGSize)shadowOffset;

这仅仅是一个label的, 虽然不设置的地方参数可以传nil, 但是, 这像豫章书院让学生背的课文一样长的方法, 实在让人无心敲代码!
于是参考masonry, LEEAlert, 封装了一个分类, 可以帮你快速创建 label, button, textfield

介绍一下使用 (UIlabel 为例, 其他使用方法雷同).

@property (weak, nonatomic) IBOutlet UIView *grayView;
  // 传nil, 标示不进行默认是设置, 完全有自己设置
  UILabel *label1 = [UILabel speedCreatLabelWith:nil];
    [self.grayView addSubview:label1];
    
    // 在block里面可以 一直使用点语法, 设置属性值
    UILabel *label2 = [UILabel speedCreatLabelWith:^(SWLabel *label) {
        label.sText(@"label2")
        .sBackgroundColor([UIColor redColor])
        .sFrame(CGRectMake(10, 40, 60, 30))
        .sFont([UIFont systemFontOfSize:16])
        .sTextColor([UIColor whiteColor]);
    }];
    [self.grayView addSubview:label2];
    
//  你也可以想一个链条一样,  一直这么练下去, 而不是用block
//  不调用config 代表不进行默认设置
    [self.grayView addSubview:(
         [SWLabel label]
         .sFrame(CGRectMake(10, 80, 60, 30))
         .sText(@"label3")
         .sBackgroundColor([UIColor orangeColor])
     )];

// 调用config进行默认设置
    [self.grayView addSubview:(
           [SWLabel label].config()
           .sFrame(CGRectMake(10, 120, 60, 30))
           .sText(@"label4")
     )];

效果:

Snip20171117_46.png
你可以根据项目需求, 在方法内部给 控件设置 最常用的属性, 遇见差异再更改, 从而减少代码
还有, 虽然block里面使用了self, 但是循环引用 不存在的,放心使用

GitHub链接

上一篇下一篇

猜你喜欢

热点阅读