首页 > 代码库 > 星级评价(简单版)

星级评价(简单版)

网上看见很多星星评分的控件类,所使用的方法各有不同,但是代码量实在太多(我这人实在不喜欢看长篇大论)。明明就是一个简简单单的功能,非得写那么长的代码,所以我就自己封装了一个类,专门用于做星星评分的。其中如果有写的不好的地方或者您有更好的办法,欢迎指出。

github链接:https://github.com/chen5787965/Newstar.git

#import "starRating.h"

 @interface StarRating ()

{

    UIButton *preBTN;

}

@property(nonatomic,weak)UILabel *textLabel; 

@property(nonatomic,strong)NSMutableArray *btnArray; 

@end

@implementation StarRating

-(instancetype)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        // 创建一个可变数组

        self.btnArray = [[NSMutableArray alloc]init];

        //1.初始化按钮

        [self setupButton];

        //2.初始化文本框

        [self setupLabel];

    }    

    return self;

}

//初始化文本框

-(void)setupLabel

{

    //1. 创建一个静态文本框

    UILabel *label = [[UILabel alloc]init];

    //2. 设置文本框的属性

    label.textColor = [UIColor redColor];

    label.frame = CGRectMake(0, 0, 100, 30);

    label.center = CGPointMake(self.center.x + 30, self.center.y);

    label.textAlignment = NSTextAlignmentCenter;

    label.font = [UIFont systemFontOfSize:13];

    [self addSubview:label];

    self.textLabel = label;

}

//初始化按钮

-(void)setupButton

{

    for (int i = 0; i < 5; i++) {

        

        // 1.创建按钮

        UIButton *btn = [[UIButton alloc]init];

        

        //2.设置属性

        //2.1 普通状态下的按钮背景

        [btn setBackgroundImage:[UIImage imageNamed:@"star2"] forState:UIControlStateNormal];

        // 2.2选中状态下的按钮背景

        [btn setBackgroundImage:[UIImage imageNamed:@"star"] forState:UIControlStateSelected];

        CGFloat margin = 10;

        CGFloat btnY = self.center.y;

        CGFloat btnW = 30;

        CGFloat btnH = 30;

        CGFloat btnX = i * btnW + margin;

        btn.frame = CGRectMake(btnX, btnY, btnW, btnH);

        

        //3.设置按钮点击事件

        [btn addTarget:self action:@selector(btnOnClick:) forControlEvents:UIControlEventTouchDown];

        

        //4.将按钮添加到视图中

        [self addSubview:btn];

        //5.设置tag

        btn.tag = i;

        //6.将按钮添加到数组中

        [self.btnArray addObject:btn];

    }

}

 

-(void)btnOnClick:(UIButton *)btn

{

    //1. 被点击的按钮之前之后的按钮状态改变

    for(UIButton *button in self.btnArray)

    {

        if (button.tag <= btn.tag) {

            if ((preBTN.tag == btn.tag)&&(button.tag==btn.tag)) {

                btn.selected = !btn.selected;

            }else{

                button.selected = YES;

            }

        }else{

            button.selected = NO;

        }        

    }

    //2.上一次被点击的按钮

    preBTN = btn;

    //3.设置静态文本框的内容

    if (btn.selected) {

        [self.textLabel  setText:[NSString stringWithFormat:@"%ld分好评",btn.tag + 1]];

    }else

    {

        [self.textLabel  setText:[NSString stringWithFormat:@"%ld分好评",btn.tag]];

    }    

}

@end

星级评价(简单版)