0

私はtableviewを使用しており、uitableviewで複数のチェックを行っています。すべてが完璧になり、正しい値を取得しますが、テーブルビューをスクロールすると、チェックマーク画像が失われます(デフォルトのチェックマークを使用してカスタム画像はありません)が、選択した値は配列に保持されます...

テーブルビューをスクロールすると、チェックマークの画像が削除されます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    AppDelegate *app= (AppDelegate *)[[UIApplication sharedApplication]delegate];

    if([_tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark){

    NSLog(@"yes");

    [placesvisitedarray removeObject:[app.nameArray objectAtIndex:indexPath.row]];


    [_tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;

    }
    else
    {
        NSLog(@"no");

        [_tableView cellForRowAtIndexPath:indexPath].accessoryType =  UITableViewCellAccessoryCheckmark;

        [placesvisitedarray addObject:[app.nameArray objectAtIndex:indexPath.row]];

    }
   // [_tableView reloadData];

}
4

1 に答える 1

1

スクロールするとテーブルビューcellForRowAtIndexPath:が呼び出され、セルが再作成されるため、チェックマークが削除されています。

配列に特定の値が存在するかどうかを確認するメソッドを作成できます。

- (BOOL)stringExistsInPlacesVisited:(NSString *)stringToMatch {
    for (NSString string in placesvisitedarray) {
        if ([string isEqualTo:stringToMatch])
            return YES;
    }
    return NO;
}

次に、cellForRowAtIndexPath:placesvisitedarray をチェックして、チェックマークを挿入/削除する必要があります。

if ([stringExistsInPlacesVisited:[app.nameArray objectAtIndex:indexPath.row])
    cell.accessoryType =  UITableViewCellAccessoryCheckmark;
else
   cell.accessoryType =  UITableViewCellAccessoryNone;

コードはテストされていないため、機能しない可能性がありますが、少なくとも続行方法についてのアイデアが得られます。

于 2013-02-10T11:40:46.563 に答える