3

ストーリーボードを使用して設計された静的なテーブルビューがあります。1 つのセルを選択して reloadSections:withRowAnimation: を呼び出すたびに、その上の 2 つのセルが消えますが、必要な 4 つのセルが表示されます。なぜこれが起こっているのか知っている人はいますか?

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

{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

if (indexPath.section == 1) {
        if (indexPath.row == 0) {

        }
        else if (indexPath.row == 1) { // Map Type Cell

            self.isSelectingMapType = ![self isSelectingMapType];
            [self.tableView beginUpdates];
            [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationAutomatic];
            [self.tableView endUpdates];
        }
        else {

            // Configure the single selection
            if (self.checkedIndexPath) {
                UITableViewCell *uncheckCell = [tableView cellForRowAtIndexPath:self.checkedIndexPath];
                uncheckCell.accessoryType = UITableViewCellAccessoryNone;
            }

            // Check the cell
            UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
            cell.accessoryType = UITableViewCellAccessoryCheckmark;

            // Store the new indexPath
            self.checkedIndexPath = indexPath;

            // Save the map type indexPath
            [LBSettings saveObject:indexPath forKey:kLBSettingsMapTypeIndexPath];

            // Save the map type
            if (indexPath.row == 2) {

                // Save the map type standard
                [LBSettings saveObject:[NSNumber numberWithInt:kGMSTypeNormal] forKey:kLBSettingsMapType];
            }
            if (indexPath.row == 3) {

                // Save the map type satellite
                [LBSettings saveObject:[NSNumber numberWithInt:kGMSTypeSatellite] forKey:kLBSettingsMapType];
            }
            if (indexPath.row == 4) {

                // Save the map type hybrid
                [LBSettings saveObject:[NSNumber numberWithInt:kGMSTypeHybrid] forKey:kLBSettingsMapType];
            }
            if (indexPath.row == 5) {

                // Save the map type terrian
                [LBSettings saveObject:[NSNumber numberWithInt:kGMSTypeTerrain] forKey:kLBSettingsMapType];
            }

            self.isSelectingMapType = ![self isSelectingMapType];
            [self.tableView beginUpdates];
            [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationAutomatic];
            [self.tableView endUpdates];
        }
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in each section
    switch (section) {
        case 0:
            return 3;
            break;
        case 1:
            if (self.isSelectingMapType == YES) {
                return 6;
            }
            return 2;
            break;
        case 2:
            return 2;
            break;
        case 3:
            return 6;
            break;
        case 4:
            return 0;
            break;
        default:
            break;
    }
    return 0;
}
4

1 に答える 1

2

アニメーション トランザクションの終了後に reloadData を呼び出してみてください。

[CATransaction begin]; 

[CATransaction setCompletionBlock:^{ 
     [self.tableView reloadData];
}];

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationAutomatic];

[CATransaction commit];
于 2013-09-18T10:29:15.137 に答える