Kirdok
Kirdok

Reputation: 1914

Flashing background on UITableview

I am trying to make quiz program. I used to UITableview for answers. How can i make to flashing on background when user click the correct answer? Is it possible?

Here is the some part of my project;

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:0]];

//cell=[[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:@"Cell"];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}


NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [selectedCells containsObject:rowNsNum]  )
{
    //cell.accessoryType = UITableViewCellAccessoryCheckmark;

}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}

NSString *text  = [answers objectAtIndex:indexPath.row];
NSData *data    = [text dataUsingEncoding: [NSString defaultCStringEncoding] ];
cell.textLabel.text  = [[NSString alloc] initWithData:data    encoding:NSUTF8StringEncoding ];

//cell.textLabel.text=[answers objectAtIndex:indexPath.row];
cell.textLabel.backgroundColor = [UIColor clearColor];
tableView.backgroundColor=[UIColor whiteColor];
cell.backgroundColor=[UIColor whiteColor];

[cell.textLabel setFont:[UIFont fontWithName:@"Helvatica" size:15]];
return cell;
}


-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

CGRect rect = cell.frame;
UIView * view = [[UIView alloc] init];
UIImageView *back = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ListGray"] ];

BOOL selx;
if (answerType==2)
    selx = [self isSelected:indexPath];
else
    selx = [lastIndexPath isEqual:indexPath];

if (selx) {
    back = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"aaaa.png"] ];
    cell.textLabel.textColor = [UIColor whiteColor];
    [view addSubview:back];
    cell.backgroundView =  view;

    back.frame = CGRectMake(0, 12,rect.size.width,rect.size.height-12);
} else {
    cell.accessoryView = nil;
    if (lastIndexPath != nil){
        cell.textLabel.textColor = [UIColor blackColor];
        [view addSubview:back];
        cell.backgroundView =  view;

        back.frame = CGRectMake(0, 12,rect.size.width,rect.size.height-12);
        back = nil;


    }
}
[view addSubview:back];
cell.backgroundView =  view;

back.frame = CGRectMake(0, 12,rect.size.width,rect.size.height-12);

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

tableView.allowsSelection = NO;

[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];

if (answerType==3) {
        NSString *secilenAnswerID;
        secilenAnswerID= [genelAnswersID valueForKey:[answers objectAtIndex:indexPath.row]];

        for (int a=0; a<[answers count]; a++) {

            cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:a inSection:0]];
            cell. accessoryType= UITableViewCellAccessoryNone;
            [selectedCells removeObject:rowNsNum];
            selectedCells=[[NSMutableArray alloc]init];
        }
        cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:0]];
        isRadioSelected=TRUE;
        radioAnswer = [genelAnswersID valueForKey:[answers objectAtIndex:indexPath.row]];
        [selectedCells addObject:rowNsNum];


    lastIndexPath = indexPath;
    [tableView reloadData];
}

}

Sorry for my bad english. Thank you for your interest.

Upvotes: 0

Views: 1040

Answers (2)

Kirdok
Kirdok

Reputation: 1914

Here is my question's solution. I took advice from Stephen Johnson:)

 [UIView animateWithDuration:0.1f delay:0 options:(UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat) animations:^{
             [UIView setAnimationRepeatCount:3];
            cell.alpha = 0;
        } completion: ^(BOOL finished) {
            cell.hidden = YES;

            [UIView animateWithDuration:0.1 animations:^{
                cell.alpha = 1;
            } completion: ^(BOOL finished) {
                cell.hidden = NO;
            }];

        }];

Upvotes: 1

Stephen Johnson
Stephen Johnson

Reputation: 5121

You can add a background view into your UITableViewCell with a backgroundColor. Then in your tableView: didSelectRowAtIndexPath: you can animate the hidden or alpha with the animation APIs in UIView. When the animation finishes you can animate hidden to TRUE or alpha back to 0 to get the flash effect.

Upvotes: 3

Related Questions