0

UIContainerView 内に埋め込まれた、スクロールが有効になっている UITableViewController があります。テーブルビュー内には、内部に UIImageView を持つカスタム UITableViewCell があり、テーブルビュー内の複数のセルの 1 つを選択すると、インデックス パスを取得し、選択したセルのイメージ ビューに目盛りを表示するように設定します。テーブル ビューには、配列からの複数のデータが動的に取り込まれます。単純。

問題は、テーブルビューがコンテナー ビュー内で表示できるよりも長いため、インデックス パスが表示されているコンテンツにのみ適用されているように見えることです。対応するインデックスパスを持つセルを目盛り付きの可視セルに設定していることを意味します。

5 つのセルが表示されているとします。4 番目のセルが選択されています。さらに 5 つのセルを下に移動すると、10 番目のセルにチェックが適用されますが、技術的には非表示コンテンツの 5 番目のセルです。セルの再利用と関係があると思いますが、どうすればよいかわかりません。

これを修正するにはどうすればよいですか?(コードは以下の通り)

    - (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    CuisineTableCell *cell  = [tableView cellForRowAtIndexPath:indexPath];
    //Store current view in defaults
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if (cuisineSelected == NO) {
        cuisineSelected = YES;
        cell.imageView.image = [UIImage imageNamed:@"TickedCircle"];
        //Set cuisine one defaults
        [defaults setObject:[cuisinesArray objectAtIndex:indexPath.row] forKey:@"filterCuisineString"];
        [defaults synchronize];
        selectedRow = [tableView indexPathForSelectedRow];
    }
    else if(indexPath.row == selectedRow.row) {
        cuisineSelected = NO;
        cell.imageView.image = [UIImage imageNamed:@"UntickedCircle"];
        //Set cuisine one defaults
        [defaults setObject:@"" forKey:@"filterCuisineString"];
        [defaults synchronize];
        selectedRow = NULL;
    }
    else {
        CuisineTableCell *selectedCell  = [tableView cellForRowAtIndexPath:selectedRow];
        selectedCell.imageView.image = [UIImage imageNamed:@"UntickedCircle"];
        // the one and only cell in the section
        cuisineSelected = YES;
        cell.imageView.image = [UIImage imageNamed:@"TickedCircle"];
        //Set cuisine one defaults
        [defaults setObject:[cuisinesArray objectAtIndex:indexPath.row] forKey:@"filterCuisineString"];
        [defaults synchronize];
        selectedRow = [tableView indexPathForSelectedRow];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"filterCuisineCell";
    CuisineTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cuisineSelected == NO) {
        cell.imageView.image = [UIImage imageNamed:@"UntickedCircle"];
    }
    cell.textLabel.text = [cuisinesArray objectAtIndex:indexPath.row];

    return cell;
}
4

1 に答える 1