我在我的应用中创建了一个功能,可以在点击单元格时加载自定义单元格。点击单元格将显示额外的按钮,再次点击将隐藏它,没有问题。但是,当我点击当前所选行旁边的行时,我认为我有一个单元重用问题。看一下屏幕截图,我点击North California然后按钮出现,当我点击埃塞俄比亚时,结果是第二个截图。
http://i228.photobucket.com/albums/ee262/romano2717/reuse.jpg
这是代码
if(selectedIndexPath != nil && [selectedIndexPath isEqual:indexPath]) {
selectedIndex = indexPath.row;
NSLog(@"selectedIndex %d",selectedIndex);
static NSString *CustomCellIdentifier = @"CustomCell";
CustomCell *customCell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier];
if (customCell == nil) {
customCell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CustomCellIdentifier] autorelease];
}
customCell.locationLabelOutlet.text = [usgsFeeds objectAtIndex:[indexPath row]];
customCell.dateLabelOutlet.text = [pubDateArr objectAtIndex:[indexPath row]];
float thisMag;
thisMag = [(NSNumber *)[magnitudeArr objectAtIndex:[indexPath row]] floatValue];
customCell.magnitudeImageOutlet.image = [self imageForMagnitude:thisMag];
[customCell setSelectionStyle:UITableViewCellSelectionStyleNone];
return customCell;
}
else{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
locationLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10, 3, 225, 20)] autorelease];
locationLabel.tag = kLocationLabelTag;
locationLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0];
locationLabel.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:locationLabel];
//same as above will follow
}
else{
locationLabel = (UILabel *)[cell.contentView viewWithTag:kLocationLabelTag];
dateLabel = (UILabel *)[cell.contentView viewWithTag:kDateLabelTag];
magnitudeImage = (UIImageView *)[cell.contentView viewWithTag:kMagnitudeImgTag];
}
locationLabel.text = [usgsFeeds objectAtIndex:[indexPath row]];
dateLabel.text = [pubDateArr objectAtIndex:[indexPath row]];
float thisMag;
thisMag = [(NSNumber *)[magnitudeArr objectAtIndex:[indexPath row]] floatValue];
magnitudeImage.image = [self imageForMagnitude:thisMag];
return cell;
}
这是我的自定义单元格
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:
(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
locationLabelOutlet = [[UILabel alloc] initWithFrame:CGRectMake(10, 3, 210, 17)];
locationLabelOutlet.font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0];
locationLabelOutlet.backgroundColor = [UIColor clearColor];
//and other outlets
[thisContainer addSubview:locationLabelOutlet];
[thisContainer addSubview:magnitudeImageOutlet];
[thisContainer addSubview:dateLabelOutlet];
[buttonsView addSubview:locButton];
[buttonsView addSubview:detButton];
[buttonsView addSubview:shabutton];
[buttonsView addSubview:favButton];
[thisContainer addSubview:buttonsView];
[self.contentView addSubview:thisContainer];
这是针对选择
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
selectedIndexPath = indexPath;
if(selectedIndex == indexPath.row)
{
selectedIndexPath = nil;
[tableView reloadRowsAtIndexPaths:
[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
selectedIndex = -1;
return;
}
if(selectedIndexPath != nil && [selectedIndexPath isEqual:indexPath]) {
[tableView reloadRowsAtIndexPaths:
[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
答案 0 :(得分:0)
好吧,也许是因为您没有在selectedIndexPath
重新加载之前选择的单元格。
我猜你的代码可以在同一行点按两次。
我将直接评论tableView:didSelectRowAtIndexPath:
方法中的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:NO];
//added the following if() part
if(selectedIndex != -1 && selectedIndex != indexPath.row && selectedIndexPath != nil)
{
[tableView reloadRowsAtIndexPaths:
[NSArray arrayWithObject:selectedIndexPath] withRowAnimation:UITableViewRowAnimationFade];
}
selectedIndexPath = indexPath;
if(selectedIndex == indexPath.row)
{
selectedIndexPath = nil;
[tableView reloadRowsAtIndexPaths:
[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
selectedIndex = -1;
return;
}
if(selectedIndexPath != nil && [selectedIndexPath isEqual:indexPath])
{
[tableView reloadRowsAtIndexPaths:
[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
我希望它能奏效。