您好我想将评级星标应用到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
答案 0 :(得分:0)
我建议你自己做这个,只要你是开发新手,并且想要构建你的逻辑,所以不要使用任何现成的库,你可以按照以下步骤。
首先在单元格上添加5个按钮,并为每个按钮默认状态设置有边框的星形图像,然后将按钮状态更改为“选定”并设置填充的星形图像。 (对5个按钮也一样)。完成此操作后,请确保将所有按钮状态更改为默认。
为所有5个按钮添加 buttonStarRatingsClicked 操作。
为starsInCell类中的每个按钮创建插座集合 buttonCollectionStarRatings 。
在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];
}
}
}
}
}
上面的部分将允许您选择每个单元格上的星级,下一步是在滚动表格的同时管理每个单元格上的选定星标。