Как отобразить подпредставление при двойном щелчке UITableViewCell?

Я хочу отобразить подпредставление для выбранной ячейки. Выбранная ячейка должна развернуться при двойном щелчке по ячейке, и в этой развернутой области должно отображаться подпредставление. Мне удалось отобразить изображение в подпредставлении, отображаемом в расширенной области ячейки. Но когда я прокручиваю UITableView после двойного щелчка по ячейке, изображение, отображаемое во вложенном представлении, исчезает.

Пожалуйста, предложите мне.............

Расширяя ячейку:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (selectedRow && indexPath.row == tappedRow && (tapCount == 2 || tapCount ==3))
        return 210;

    return 62;
}

Код для отображения SubView для выбранной строки

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

    //UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"ChooseAPlayer"];
    if(tapCount == 1 && tappedRow == indexPath.row){

        tapCount = tapCount + 1;
        imgView.hidden =YES;

        selectedRow = [self.tableView indexPathForSelectedRow];
        [self.tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationNone];
        imgView.hidden = NO;
        button.frame = CGRectMake(245,18,image.size.width, image.size.height);
        //  cell.accessoryView.hidden = YES;
        [UIView commitAnimations];

    }
    else if (tapCount == 0){

        tapCount = tapCount +1;
        tappedRow = indexPath.row;
    }
    else if (tapCount ==2 && tappedRow == indexPath.row){

        tapCount = tapCount + 1;
        imgView.hidden =YES;

        selectedRow = [self.tableView indexPathForSelectedRow];
        [self.tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationNone];
        imgView.hidden = NO;
        button.frame = CGRectMake(245,18,image.size.width, image.size.height);
        //  cell.accessoryView.hidden = YES;
        [UIView commitAnimations];
    }
    else if (tapCount ==3 && tappedRow == indexPath.row){
        tapCount = 0;
        //cell.accessoryView.hidden = NO;
        imgView.hidden = YES;

        [self.tableView setRowHeight:62];
        [self.tableView beginUpdates];
        [self.tableView endUpdates];
        [imgView release];
    }
    else if (tappedRow != indexPath.row){
        tapCount = 1;
        tappedRow = indexPath.row;
        imgView.hidden = YES;

        [imgView release];
    }

}




- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"ChooseAPlayer"];


    imgView.hidden = YES;


    if ( indexPath.row == tappedRow && (tapCount == 2 || tapCount ==3))
    {
        imgView.tag = indexPath.row;
        imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 50, 320,150)];
        imgView.backgroundColor = [UIColor clearColor];
        [imgView setImage:[UIImage imageNamed:@"Playersdetails.png"]];
        [cell.contentView addSubview:imgView];
        imgView.hidden= NO;
    }


    UILabel *lblName = (UILabel *)[cell viewWithTag:101];
    [lblName setText:[inputPlayersList objectAtIndex:[indexPath row]]];
    UILabel *Teams = (UILabel *)[cell viewWithTag:103];
    [Teams setText:[inputPlayersTeams objectAtIndex:[indexPath row]]];

    UILabel *AwayTeams = (UILabel *)[cell viewWithTag:104];
    [AwayTeams setText:[inputPlayersAwayteams objectAtIndex:[indexPath row]]];

    UILabel *PlayersPrice = (UILabel *)[cell viewWithTag:105];
    [PlayersPrice setText:[inputPlayersPrice objectAtIndex:[indexPath row]]];



    image = [UIImage   imageNamed:@"Select_white.png"];
                      button = [UIButton buttonWithType:UIButtonTypeCustom];
                      CGRect frame = CGRectMake(0, 0, image.size.width, image.size.height);
                      button.frame = frame;
                      [button setBackgroundImage:image forState:UIControlStateNormal];

                      [button addTarget:self action:@selector(accessoryButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside];
                      button.backgroundColor = [UIColor clearColor];
                      cell.accessoryView = button;

    return cell;
}

2 ответа

Попробуйте это в cellForRowAtIndexPath

 //    imgView.hidden = YES; //comment this line

 if ( indexPath.row == tappedRow && (tapCount == 2 || tapCount ==3))
            {
                imgView.tag = indexPath.row;
                imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 50, 320,150)];
                imgView.backgroundColor = [UIColor clearColor];
                [imgView setImage:[UIImage imageNamed:@"Playersdetails.png"]];
                [cell.contentView addSubview:imgView];
                imgView.hidden= NO;
            }
            else
            {
                imgView.hidden = YES;

            }

Чтобы получить действия с одним или двумя щелчками мыши на UITableView, выполните следующие действия:

1. Создать CustomTableViewCell, подкласс UITableViewCell, И переопределить вышеупомянутые методы.

           #import "CustomTableViewCell.h"


                @implementation CustomTableViewCell

                - (void)dealloc {
                    [super dealloc];
                }

                - (void)drawRect:(CGRect)rect {
                    CGContextRef ctx = UIGraphicsGetCurrentContext();
                    // Use the same color and width as the default cell separator for now
                    CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.5, 1.0);
                    CGContextSetLineWidth(ctx, 0.5);

                    for (int i = 0; i < [columns count]; i++) {
                        CGFloat f = [((NSNumber*) [columns objectAtIndex:i]) floatValue];
                        CGContextMoveToPoint(ctx, f, 0);
                        CGContextAddLineToPoint(ctx, f, self.bounds.size.height);
                    }

                    CGContextStrokePath(ctx);

                    [super drawRect:rect];
                }

                - (void)addColumn:(CGFloat)position {
                    [columns addObject:[NSNumber numberWithFloat:position]];
                }


                - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
                    UITouch *aTouch = [touches anyObject];
                    NSLog(@"touchesBegan tapCount = %d", [aTouch tapCount]);
                    ////
                       imgView.tag = indexPath.row;
                imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 50, 320,150)];
                imgView.backgroundColor = [UIColor clearColor];
                [imgView setImage:[UIImage imageNamed:@"Playersdetails.png"]];
                [cell.contentView addSubview:imgView];
                imgView.hidden= NO;

                /////
            } 


            - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
                UITouch *aTouch = [touches anyObject];
                NSLog(@"touchesCancelled tapCount = %d", [aTouch tapCount]);
            }




     - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
            UITouch *aTouch = [touches anyObject];
            NSLog(@"touchesEnded tapCount = %d", [aTouch tapCount]);
        }


        - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
            UITouch *aTouch = [touches anyObject];
            NSLog(@"touchesMoved tapCount = %d", [aTouch tapCount]);
        }

2. В UITableView'scellForRowAtIndexPath метод, добавьте CustomTableViewCell вместо UITableViewCell,

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

        NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];

        CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

        if (cell == nil) {
            cell = [[[CustomTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
        }

        UILabel *regNoLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 3, 150, 15)];
        //regNoLabel.text = [[self.resultArray objectAtIndex:indexPath.section] valueForKey:@"Ent_Regn_Nbr"];
        regNoLabel.text = @"Apple";
        regNoLabel.font = [UIFont systemFontOfSize:12.0];
        [cell addSubview:regNoLabel];
        [regNoLabel release];
            return cell;

    } 
Другие вопросы по тегам