1

セクションと行にアルファベット順にインデックス付けされたユーザー名のリストを含む tableView があります。セクション内の行の 1 つをタップすると、正しいユーザーが受信者の配列に追加され、名前の横にチェックマークがセルに表示されます。ただし、選択されていない他のユーザー名の横にもチェックマークが表示され、受信者配列にありません。選択したセルに新しい indexPath を再割り当てしようとしましたが (以下のコードを参照)、機能させることができませんでした。正しいパスを登録しますが、割り当てません。ユーザーに各セクションの行を問題なく割り当てるために同様の方法を使用していますが、何らかの理由でアクセサリ マークが問題を引き起こしています。この同じトピックについて他のスレッドがオーバーフローしているのを見たことがありますが、私の場合は解決できません。手がかりはありますか?乾杯!

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

    int row = indexPath.row;
    int section = indexPath.section;
    NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:row inSection:section];

    [tableView deselectRowAtIndexPath:newIndexPath animated:NO];

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:newIndexPath];

    NSArray *array = [self.sectionsArray objectAtIndex:indexPath.section];
    PFUser *user = [array objectAtIndex:indexPath.row];

    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        [self.recipients addObject:user];
    }
    else {
        cell.accessoryType = UITableViewCellAccessoryNone;
        [self.recipients removeObject:user];
    }

    [self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (error) {
            NSLog(@"Error %@ %@", error, [error userInfo]);
        }
    }];

ここに cellForRowAtIndexPath があります:

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

    // Get the user names from the array associated with the section index in the sections array.
    NSArray *userNamesInSection = (self.sectionsArray)[indexPath.section];

    // Configure the cell with user name.
    UserNameWrapper *userName = userNamesInSection[indexPath.row];
    cell.textLabel.text = userName.user;

    return cell;
}
4

1 に答える 1