美文网首页ios
快速创建UILabel, UIButton, UITedtFie

快速创建UILabel, UIButton, UITedtFie

作者: Thinkdifferents | 来源:发表于2017-11-17 15:49 被阅读10224次

    链式编程创建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链接

    相关文章

      网友评论

      本文标题:快速创建UILabel, UIButton, UITedtFie

      本文链接:https://www.haomeiwen.com/subject/mfujvxtx.html