2016-06-27 18 views
0

Hallo Ich möchte Bewertungssterne in UITableViewCell anwenden.So wenden Sie Bewertungssterne in UITableViewCells an

Ist eine Probe dafür verfügbar?

Ich habe versucht, Code, aber es funktioniert nicht.

Bitte helfen.

Mein Code:

#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

Zeigen Sie den Code an, den Sie versucht haben. Sie können Schaltflächen verwenden, die zwei Bilder für den ausgewählten und den Standardstatus festgelegt haben, und dann das Bild entsprechend verwalten. –

+0

möchten Sie Benutzern erlauben, Rate zu geben oder wollen nur Bewertung zeigen? – ivarun

+0

Hi ivarun, Ja. Ich möchte Benutzern erlauben, eine Bewertung abzugeben. –

Antwort

0

Ich würde Ihnen empfehlen, diese selbst nur zu tun, wenn Sie in der Entwicklung neu sind und Sie möchten Ihre Logik bauen, so stattdessen jede vorgefertigte Bibliothek verwenden, können Sie unter Schritte folgen.

  1. Erste hinzufügen 5 Tasten auf der Zelle und Set grenzte Stern für jeden Zustand Standardtasten und dann Tasten Zustand zu ausgewähltem ändern und Set Sternbild gefüllt. (Tun Sie dasselbe für 5 Tasten). Nachdem Sie dies getan haben, stellen Sie sicher, dass Sie den Status aller Schaltflächen auf Standard setzen.

  2. Aktion hinzufügen buttonStarRatingsClicked für alle 5 Tasten.

  3. Erstellen Sie Outlet-Sammlung buttonCollectionStarRatings für jede Schaltfläche in starsInCell-Klasse.

  4. Fügen Sie die untenstehende Methode in Ihrem ViewController hinzu, der tableView mit Sternen in jeder Zelle anzeigt.

    - (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]; 
         } 
        } 
    } 
    } 
    } 
    

Der obige Teil Sie Sterne-Bewertungen auf jeder Zelle nächster Schritt wird die Verwaltung der ausgewählten Sterne in jeder Zelle auswählen kann, während die Tabelle zu scrollen.

Verwandte Themen