0

セルを表示するテーブルビューがあります。これらのセルの一部はトグル ボタンで削除する必要があり、一部は追加されます。

したがって、3 番目のセクションには 4 つのセルがあります。タイトルの昇順は、same?、start、end、duration です。リストの 2 番目と 3 番目のセルにはテキスト フィールドがaccesoryViewsあり、(一番上のセルにある) トグル ボタンをオフにすると両方とも削除されます。これにより、2つのセルが残ります。同じですか?私の第3セクションの持続時間。

ボタンを押すと、2 つのセルが同じセクション (セクション 3) に追加されますが、何らかの理由で、削除された 2 つのセルのテキスト フィールドがアクセサリ ビューとして表示されます。

私のコードは次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"creatures"];
    if (nil == cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:@"creatures"];
    }
    switch (indexPath.section)
    {
        case 0:
            break;
        case 1:

            break;
        case 2:

            cell.textLabel.text = [timesTitles objectAtIndex:indexPath.row];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;

            if (indexPath.row == 0) {
                sameTimeEverydaySwitch = [[UISwitch alloc]initWithFrame:CGRectZero];
                [sameTimeEverydaySwitch setOn:YES];
                [sameTimeEverydaySwitch addTarget:self action:@selector(sameEverydaySwitchChanged) forControlEvents:UIControlEventValueChanged];
                cell.accessoryView = sameTimeEverydaySwitch;
            }
            if ([[timesTitles objectAtIndex:indexPath.row] isEqualToString:@"Start time:"]) {

                cell.accessoryView = startTimeTextfield;
                NSLog(@"log");
            }

            if ([[timesTitles objectAtIndex:indexPath.row] isEqualToString:@"End time:"]) {

                cell.accessoryView = endTimeTextfield;
                NSLog(@"log2");

            }

            if ([[timesTitles objectAtIndex:indexPath.row] isEqualToString:@"Meeting duration"]) {

                cell.accessoryView = meetingDurationTextfield;

            }

            break;
        default:
            cell.textLabel.text = @"Not Found";
    }
    return cell;
}

ボタンが切り替えられると、次のように呼び出します。

if (![sameTimeEverydaySwitch isOn]) {

    for (int j = 0; j < timesTitles.count; j++) {
        if ([[timesTitles objectAtIndex:j] isEqualToString:@"Start time:"]) {
            [timesTitles removeObjectAtIndex:j];
        }
        if ([[timesTitles objectAtIndex:j] isEqualToString:@"End time:"]) {
            [timesTitles removeObjectAtIndex:j];
        }
    }
        [timesTitles addObjectsFromArray:daysToAddToTitlesArray];


    NSArray *deleteIndexPaths = [NSArray arrayWithObjects:
                                 [NSIndexPath indexPathForRow:2 inSection:2],
                                 [NSIndexPath indexPathForRow:1 inSection:2],
                                 nil];
    NSMutableArray *insertIndexPaths = [[NSMutableArray alloc] init];

    for (int i = 2; i < [timesTitles count]; i++) {
        NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:2];
        [insertIndexPaths addObject:path];
    }

    UITableView *tv = (UITableView *)self.view;

    [tv beginUpdates];
    [tv insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationRight];
    [tv deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade];
    [tv endUpdates];

}

このコードは、2 つの中央のセルを正常に削除します。

次を使用して、残りの2つの下に2つの新しいセルを追加する場合:

    for (int i = 0; i < daysToAddToTitlesArray.count; i++) {

        if (![timesTitles containsObject:[daysToAddToTitlesArray objectAtIndex:i]]) {

            NSIndexPath *path = [NSIndexPath indexPathForRow:[timesTitles count] inSection:2];
            [timesTitles insertObject:[daysToAddToTitlesArray objectAtIndex:i] atIndex:[timesTitles count]];
            [insertIndexPaths addObject:path];

        }
    }
    UITableView *tv = (UITableView *)self.view;
    [tv beginUpdates];
    [tv insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationRight];
    [tv endUpdates];

以下の 2 つの新しいセルが正常に追加されますが、ボットにはテキスト フィールドがあります。

アプリを実行したときの唯一の出力は、log と log2 です。

私は困惑している。

4

1 に答える 1

0

再利用可能なセルの概念に精通していることを願っています。(そうでない場合は、これをチェックしてください)

cell.accessoryViewあなたのコードでは、基準の1つが真の場合にのみ設定されていることがわかります。それ以外の場合は、再利用可能なセルからアクセサリを取得します。

配列とインデックス内のタイトルをチェック (デバッグ モードを使用)

マルコ

于 2015-06-15T20:52:15.450 に答える