如何将评级星应用于UITableViewCells

时间:2016-06-27 05:05:41

标签: ios uitableview

您好我想将评级星标应用到UITableViewCell

是否有可用的样品?

我尝试了一些代码,但它没有用。

请帮忙。

我的代码:

#import "ViewController.h"
#import "starsInCell.h"

@interface ViewController ()
{
    starsInCell *cell;
    NSMutableArray *mainArray,*BtnsArray;
}
@end

@implementation ViewController
@synthesize TableList;

- (void)viewDidLoad {
    [super viewDidLoad];
    TableList.delegate = self;
    TableList.dataSource = self;
    mainArray = [[NSMutableArray alloc] initWithObjects:@"",@"", @"",@"",@"",nil];
    BtnsArray = [[NSMutableArray alloc] initWithObjects:@"false",@"false",@"false",@"false",@"false", nil];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return mainArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *cellIdentifier = @"Cell";
    cell =[TableList dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil)
    {

        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"starsInCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    //cell.textLabel.text = @"1";
    //cell.backgroundColor = [UIColor orangeColor];


    NSString *btn1str = [BtnsArray objectAtIndex:0];
    NSString *btn2str = [BtnsArray objectAtIndex:1];
    NSString *btn3str = [BtnsArray objectAtIndex:2];
    NSString *btn4str = [BtnsArray objectAtIndex:3];
    NSString *btn5str = [BtnsArray objectAtIndex:4];

    [self setImages:btn1str :cell.btn1];
    [self setImages:btn2str :cell.btn2];
    [self setImages:btn3str :cell.btn3];
    [self setImages:btn4str :cell.btn4];
    [self setImages:btn5str :cell.btn5];


    [cell.btn1 addTarget:self action:@selector(btn1Clicked:) forControlEvents:UIControlEventTouchUpInside];
    [cell.btn2 addTarget:self action:@selector(btn2Clicked:) forControlEvents:UIControlEventTouchUpInside];
    [cell.btn3 addTarget:self action:@selector(btn3Clicked:) forControlEvents:UIControlEventTouchUpInside];
    [cell.btn4 addTarget:self action:@selector(btn4Clicked:) forControlEvents:UIControlEventTouchUpInside];
    [cell.btn5 addTarget:self action:@selector(btn5Clicked:) forControlEvents:UIControlEventTouchUpInside];

    return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return 80;
}

-(void)btn1Clicked:(UIButton*)button{
    NSLog(@"Action performed");
    //NSLog(@"button position is =====> %d",mainArray.count);

    CGPoint buttonPosition = [button convertPoint:CGPointZero toView:TableList];
    NSIndexPath *indexPath = [TableList indexPathForRowAtPoint:buttonPosition];
    int buttonValue = button.tag;
    NSString *string1 = [BtnsArray objectAtIndex:buttonValue];
    for (int i=0; i < mainArray.count; i++) {
        if (indexPath.row == i){

            if ([string1 isEqualToString:@"false"]){
                [BtnsArray replaceObjectAtIndex:buttonValue withObject:@"true"];
            }else{
                for (int i = buttonValue+1; i < BtnsArray.count; i++){
                    [BtnsArray replaceObjectAtIndex:i withObject:@"false"];
                }
            }
            break;
        }
    }

    [TableList reloadData];

}
-(void)btn2Clicked:(UIButton*)button{
    NSLog(@"Action performed");
    //NSLog(@"button position is =====> %d",mainArray.count);

    CGPoint buttonPosition = [button convertPoint:CGPointZero toView:TableList];
    NSIndexPath *indexPath = [TableList indexPathForRowAtPoint:buttonPosition];
    int buttonValue = button.tag;
    NSString *string1 = [BtnsArray objectAtIndex:buttonValue];
    for (int i=0; i < mainArray.count; i++) {
        if (indexPath.row == i){

            if ([string1 isEqualToString:@"false"]){
                [BtnsArray replaceObjectAtIndex:buttonValue withObject:@"true"];
            }else{
                for (int i = buttonValue+1; i < BtnsArray.count; i++){
                    [BtnsArray replaceObjectAtIndex:i withObject:@"false"];
                }
            }
            break;
        }
    }

    [TableList reloadData];

}
-(void)btn3Clicked:(UIButton*)button{
    NSLog(@"Action performed");
    //NSLog(@"button position is =====> %d",mainArray.count);

    CGPoint buttonPosition = [button convertPoint:CGPointZero toView:TableList];
    NSIndexPath *indexPath = [TableList indexPathForRowAtPoint:buttonPosition];
    int buttonValue = button.tag;
    NSString *string1 = [BtnsArray objectAtIndex:buttonValue];
    for (int i=0; i < mainArray.count; i++) {
        if (indexPath.row == i){

            if ([string1 isEqualToString:@"false"]){
                [BtnsArray replaceObjectAtIndex:buttonValue withObject:@"true"];
            }else{
                for (int i = buttonValue+1; i < BtnsArray.count; i++){
                    [BtnsArray replaceObjectAtIndex:i withObject:@"false"];
                }
            }
            break;
        }
    }

    [TableList reloadData];

}
-(void)btn4Clicked:(UIButton*)button{
    NSLog(@"Action performed");
    //NSLog(@"button position is =====> %d",mainArray.count);

    CGPoint buttonPosition = [button convertPoint:CGPointZero toView:TableList];
    NSIndexPath *indexPath = [TableList indexPathForRowAtPoint:buttonPosition];
    int buttonValue = button.tag;
    NSString *string1 = [BtnsArray objectAtIndex:buttonValue];
    for (int i=0; i < mainArray.count; i++) {
        if (indexPath.row == i){

            if ([string1 isEqualToString:@"false"]){
                [BtnsArray replaceObjectAtIndex:buttonValue withObject:@"true"];
            }else{
                for (int i = buttonValue+1; i < BtnsArray.count; i++){
                    [BtnsArray replaceObjectAtIndex:i withObject:@"false"];
                }
            }
            break;
        }
    }

    [TableList reloadData];

}
-(void)btn5Clicked:(UIButton*)button{
    NSLog(@"Action performed");
    //NSLog(@"button position is =====> %d",mainArray.count);

    CGPoint buttonPosition = [button convertPoint:CGPointZero toView:TableList];
    NSIndexPath *indexPath = [TableList indexPathForRowAtPoint:buttonPosition];
    int buttonValue = button.tag;
    NSString *string1 = [BtnsArray objectAtIndex:buttonValue];
    for (int i=0; i < mainArray.count; i++) {
        if (indexPath.row == i){

            if ([string1 isEqualToString:@"false"]){
                [BtnsArray replaceObjectAtIndex:buttonValue withObject:@"true"];
            }else{
                for (int i = buttonValue+1; i < BtnsArray.count; i++){
                    [BtnsArray replaceObjectAtIndex:i withObject:@"false"];
                }
            }
            break;
        }
    }

    [TableList reloadData];

}
-(void)setImages:(NSString*)string1 :(UIButton*)button1{

    if ([string1 isEqualToString:@"false"]){
        [button1 setImage:[UIImage imageNamed:@"Star1.png"] forState:UIControlStateNormal];
    }else{
        [button1 setImage:[UIImage imageNamed:@"Star2.png"] forState:UIControlStateNormal];
    }
}

@end

1 个答案:

答案 0 :(得分:0)

我建议你自己做这个,只要你是开发新手,并且想要构建你的逻辑,所以不要使用任何现成的库,你可以按照以下步骤。

  1. 首先在单元格上添加5个按钮,并为每个按钮默认状态设置有边框的星形图像,然后将按钮状态更改为“选定”并设置填充的星形图像。 (对5个按钮也一样)。完成此操作后,请确保将所有按钮状态更改为默认。

  2. 为所有5个按钮添加 buttonStarRatingsClicked 操作。

  3. 为starsInCell类中的每个按钮创建插座集合 buttonCollectionStarRatings

  4. 在viewController中添加以下方法,该方法显示tableView在每个单元格上都有星号。

    - (IBAction)buttonStarRatingsClicked:(id)sender {
    
    UIButton *buttonStarRatings = (UIButton*) sender;
    
    //Here you will need to get cell to access buttonCollectionStarRatings
    UITableViewCell *cell = (UITableViewCell*) [[buttonStarRatings superView] superView];
    //Check is clicked button is selected
    if ([buttonStarRatings isSelected]) {
    
    
    if (buttonStarRatings.tag == 0) { //Check is clicked button is first button
    
        //Check if Next button of selected button is selected
        if ([cell.buttonCollectionStarRatings[buttonStarRatings.tag+1] isSelected]) {
    
            @autoreleasepool {
    
                for (int i = (int)buttonStarRatings.tag+1; i < [cell.buttonCollectionStarRatings count]; i++) {
                    UIButton *buttonStarRating = cell.buttonCollectionStarRatings[i];
                    [buttonStarRating setSelected:NO];
                }
            }
    
        } else {
            //If selected button is first button and is selected then do not take any action as atlease one star should be selected.
        }
    
    } else if (buttonStarRatings.tag == 4) { //Check is clicked button is last button
    
        [buttonStarRatings setSelected:NO];
    
    } else { //Selected button is one of the button between first and last
    
        //Check if Next button of selected button is selected
        if ([cell.buttonCollectionStarRatings[buttonStarRatings.tag+1] isSelected]) {
    
            @autoreleasepool {
    
                for (int i = (int)buttonStarRatings.tag; i < [cell.buttonCollectionStarRatings count]; i++) {
                    UIButton *buttonStarRating = cell.buttonCollectionStarRatings[i];
                    [buttonStarRating setSelected:NO];
                }
            }
        } else {
            [buttonStarRatings setSelected:NO];
        }
    }
    } else {
    
    if (buttonStarRatings.tag == 0) { //Check is clicked button is first button
    
        [buttonStarRatings setSelected:YES];
    } else if (buttonStarRatings.tag == 4) { //Check is clicked button is last button
    
        @autoreleasepool {
    
            for (UIButton *buttonStarRating in cell.buttonCollectionStarRatings) {
                [buttonStarRating setSelected:YES];
            }
        }
    } else { //Selected button is one of the button between first and last
    
        @autoreleasepool {
    
            for (int i = 0; i <= (int)buttonStarRatings.tag; i++) {
                UIButton *buttonStarRating = cell.buttonCollectionStarRatings[i];
                [buttonStarRating setSelected:YES];
            }
        }
    }
    }
    }
    
  5. 上面的部分将允许您选择每个单元格上的星级,下一步是在滚动表格的同时管理每个单元格上的选定星标。