Problemi con reloadSections:withRowAnimation animazione

Ho una UITableView con due sezioni (una sezione superiore e una parte inferiore). Quando gli elementi sono “spuntate” nella sezione superiore (sezione 0), sto per trasferirmi li a fondo (sezione 1) e viceversa. Tutto è grande lavoro per salvare l’animazione.

Sto utilizzando il seguente, ma la riga di movimento è lento, ho visto i migliori risultati in altre applicazioni. Vorrei le righe della sezione superiore ad animare pulito per la sezione in basso … e le righe della sezione in basso, per animare in modo pulito per la sezione superiore quando sono selezionata o deselezionata.

//set the guests arrival status and use animation
    [guestList beginUpdates];
    if (!guest.didArrive) {
        [guest setDidArrive:YES];
        [guestList reloadSections:sectionIndexSet withRowAnimation:UITableViewRowAnimationBottom];
    } else {
        [guest setDidArrive:NO];
        [guestList reloadSections:sectionIndexSet withRowAnimation:UITableViewRowAnimationTop];
    }
    [guestList endUpdates];

[guestList reloadData];

Come dovrei codice di questa bella animazione liscio?

Edit:

Ho trovato il problema. Potrebbe, dovrebbe essere scritto in questo modo invece:

//NSIndexSet *sectionIndexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)];

    //set the guests arrival status and use animation
    [guestList beginUpdates];
    if (!guest.didArrive) {
        [guest setDidArrive:YES];
        [guestList reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationBottom];
    } else {
        [guest setDidArrive:NO];
        [guestList reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop];
    }
    [guestList endUpdates];
[guestList reloadData];

Nota la prima riga che ho commentato. Ho dimenticato di aggiungere questo in origine. Come si può vedere, io sto usando un mal costruiti NSIndexSet.

OriginaleL’autore mySilmaril | 2012-05-15

2 Replies
  1. 7

    Risolto il problema. Si prega di vedere a cura di risposta. Il codice dovrebbe essere:

    //set the guests arrival status and use animation
    [guestList beginUpdates];
    if (!guest.didArrive) {
        [guest setDidArrive:YES];
        [guestList reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationBottom];
    } else {
        [guest setDidArrive:NO];
        [guestList reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop];
    }
    [guestList endUpdates];
    [guestList reloadData];
    Questa è la risposta corretta. Non capisco perché questo viene automaticamente attivato da [tableView reloadData]. Non dovrebbe questo essere solo una funzione che potrebbe essere overiden ?
    Tizio, se si chiama reloadData, TUTTO il codice prima che qualsiasi “reloadSections” e roba del genere diventano inutili. ReloadData ricarica TUTTO. Quindi è fare un reloadData O reloadSections/reloadRows/etc a ciliegia scegliere quali parti del tuo tavolo per ricaricare, ma mai entrambi.

    OriginaleL’autore mySilmaril

  2. 4

    Perché avete bisogno di reloadData del vostro guestList alla fine della funzione ? Si sono già ricaricare le sezioni che vuoi… Prova a rimuovere che e controllare di nuovo.

    Grazie. In realtà ho provato senza il reloadData prima di postare. La tabella di vista non aggiorna correttamente senza di essa. Si suppone di utilizzare un codice aggiuntivo con reloadSections? Non capisco questa animazione e non sono stato in grado di trovare qualcosa di utile durante le mie ricerche.

    OriginaleL’autore nicolasthenoz

Lascia un commento