Frage

Ich habe eine Tabellenansicht, die eine Liste von Benutzernamen enthält, die in Abschnitten und alphabetisch in Abschnitte indexiert sind. Wenn ich auf eine der Zeilen in einem Abschnitt tippe, wird der richtige Benutzer zu meinem Empfängerarray hinzugefügt, und ein Scheckmarkt befindet sich in der Zelle neben ihrem Namen. Ein Checkmark wird jedoch auch neben anderen Benutzernamen angezeigt, die nicht ausgewählt und nicht ausgewählt wurden und sind nicht im Empfängerarray. Ich habe versucht, die ausgewählte Zelle mit einem neuen IndexPath zuzuweisen (siehe Code unten), konnte sie aber nicht zum Laufen bringen. Es registriert den richtigen Pfad, wird ihn aber nicht zuweisen. Ich verwende eine ähnliche Methode, um den Benutzern die Zeilen in jedem Abschnitt ohne Probleme zuzuweisen, aber aus irgendeinem Grund geben mir die Zubehörmarken Probleme. Ich habe einige andere Themen auf dem Überlauf über dasselbe Thema gesehen, aber ich waschen Sie, um eine Lösung für meinen Fall zu erreichen. irgendwelche Hinweise? Prost!

 - (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]);
        }
    }];

Und hier ist der Zellströkatindexpath:

- (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;
}
War es hilfreich?

Lösung

Wie ich sehe, haben Sie 2 Fehler im Cell -ForrowatIndexPath gemacht, die nicht überprüft wurden, ob die Zelle null ist, um einen zu erstellen und das Zubehör für Zellen gemäß der Empfängerliste festzulegen.

Sie sollten unten mögen:

NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

PFUser *user = [self getUserAtIndexPath:indexPath];
cell.textLabel.text = user.name;

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

return cell;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top