module Lhj class Command class View < Command self.summary = '生成iOS组件源码' self.description = '使用`lhj view --type=UILabel --name=titleLabel`' def initialize(argv) @name = argv.option('name', 'titleLabel') @type = argv.option('type', 'UILabel') super end def names @name.split(',').map(&:strip) end def type @ele_type ||= begin case @type when /image/i 'UIImageView' when /stack/i 'UIStackView' when /label/i 'UILabel' when /table/i 'UITableView' when /text/i 'UITextField' when /button/i 'UIButton' when /view/i 'UIView' else @type end end end def run print_declare puts "\n\n" print_instance puts "\n\n" print_layout puts "\n\n" print_value end def print_declare names.each do |name| puts '///' puts "@property (nonatomic, strong) #{type} *#{name};" end end def print_instance names.each do |name| puts "-(#{type} *)#{name}" puts '{' puts " if(!_#{name}){" print_alloc(name) puts " _#{name}.translatesAutoresizingMaskIntoConstraints = NO;" print_property(name) puts ' }' puts " return _#{name};" puts '}' puts "\n" end end def print_alloc(name) case type when 'UIImageView' puts " _#{name} = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@\"xxxx\"]];" when 'UIButton' puts " _#{name} = [UIButton buttonWithType:UIButtonTypeCustom];" when 'UITableView' puts " _#{name} = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];" else puts " _#{name} = [[#{type} alloc] init];" end end def print_property(name) case type when 'UILabel' puts " _#{name}.textColor = kSetCOLOR(0x333333);" puts " _#{name}.text = @\"xxxxxxxx\";" puts " _#{name}.font = [UIFont systemFontOfSize:12.0 weight:UIFontWeightRegular];" puts " _#{name}.textAlignment = NSTextAlignmentCenter;" when 'UIImageView' puts " _#{name}.backgroundColor = kBackgroundColor;" puts " _#{name}.contentMode = UIViewContentModeScaleAspectFit;" puts " _#{name}.clipsToBounds = YES;" puts " _#{name}.layer.cornerRadius = 6.0f;" puts " _#{name}.layer.borderColor = kLineColor.CGColor;" puts " _#{name}.layer.borderWidth = 0.5;" when 'UITextField' puts " _#{name}.textColor = kSetCOLOR(0x333333);" puts " _#{name}.font = [UIFont systemFontOfSize:12.0 weight:UIFontWeightRegular];" when 'UIView' puts " _#{name}.backgroundColor = kBackgroundColor;" when 'UIStackView' puts " _#{name}.axis = UILayoutConstraintAxisHorizontal;" puts " _#{name}.distribution = UIStackViewDistributionFillEqually;" when 'UITableView' puts " _#{name}.backgroundColor = kBackgroundColor;" puts " _#{name}.delegate = self;" puts " _#{name}.delegate = self;" puts " _#{name}.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];" puts " _#{name}.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];" puts " _#{name}.separatorStyle = UITableViewCellSeparatorStyleNone;" when 'UIButton' puts " _#{name}.backgroundColor = kBackgroundColor;" puts " [_#{name} setTitle:@\"xxx\" forState:UIControlStateNormal];" puts " [_#{name} setTitleColor:kSetCOLOR(0x999999) forState:UIControlStateNormal];" puts " _#{name}.titleLabel.font = [UIFont systemFontOfSize:14.0 weight:UIFontWeightRegular];" puts " [_#{name} setImage:[UIImage imageNamed:@\"xx\"] forState:UIControlStateNormal];" puts " [_#{name} setImage:[UIImage imageNamed:@\"xx\"] forState:UIControlStateSelected];" puts " [_#{name} addTarget:self action:@selector(actionHandler:) forControlEvents:UIControlEventTouchUpInside];" end end def print_layout names.each do |name| puts "[contentView addSubview:self.#{name}];" puts "[self.#{name}.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor constant:0].active = YES;" puts "[self.#{name}.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor constant:0].active = YES;" puts "[self.#{name}.topAnchor constraintEqualToAnchor:contentView.topAnchor].active = YES;" puts "[self.#{name}.bottomAnchor constraintEqualToAnchor:contentView.bottomAnchor].active = YES;" puts "[self.#{name}.widthAnchor constraintEqualToConstant:80].active = YES;" puts "[self.#{name}.heightAnchor constraintEqualToConstant:80].active = YES;" if type.eql?('UILabel') puts "[self.#{name} setContentHuggingPriority:300 forAxis:UILayoutConstraintAxisHorizontal];" puts "[self.#{name} setContentCompressionResistancePriority:300 forAxis:UILayoutConstraintAxisHorizontal];" end puts "\n\n" end end def print_value names.each do |name| if type.eql?('UILabel') puts "self.#{name}.text = @\"xxxxx\";" end end end end end end