Iphone 如何在双击UITableViewCell时显示子视图?
我想显示所选单元格的子视图。双击选定单元格时,选定单元格应展开,子视图应显示在该展开区域中。我能够在单元扩展区域中显示的子视图中显示图像。但当我双击单元格后滚动UITableView时,子视图中显示的图像正在消失 请建议我 展开单元格:Iphone 如何在双击UITableViewCell时显示子视图?,iphone,objective-c,uitableview,subview,Iphone,Objective C,Uitableview,Subview,我想显示所选单元格的子视图。双击选定单元格时,选定单元格应展开,子视图应显示在该展开区域中。我能够在单元扩展区域中显示的子视图中显示图像。但当我双击单元格后滚动UITableView时,子视图中显示的图像正在消失 请建议我 展开单元格: -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (selectedRow && inde
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (selectedRow && indexPath.row == tappedRow && (tapCount == 2 || tapCount ==3))
return 210;
return 62;
}
用于显示选定行的子视图的代码
- (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;
}
在
cellforrowatinexpath中尝试此操作
// 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]);
}
- (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;
}