Domanda

Ho un elenco di app dove gli utenti di colpire il pulsante " + " e inserire un elemento che si desidera visualizzare nell'elenco e fare clic su salva.La tabella è salvato con i dati fondamentali.L'unico problema è che quando il cell è nastrate voglio un segno di spunta per essere visualizzato.Ho attivato la selezione multipla con

UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath]; 
if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
    thisCell.accessoryType = UITableViewCellAccessoryCheckmark;  
} else {
    thisCell.accessoryType = UITableViewCellAccessoryNone;
} 
[tableView deselectRowAtIndexPath:indexPath animated:NO]; 

Io vorrei che i segni di spunta per essere mantenuta in cella dopo l'uscita dell'utente.Ho creato un attributo dell'entità denominata "controlli" e gli ha dato il tipo boolean, ma non so come fare, dove se si ha colpito una riga, quindi visualizzato un segno di spunta e persistente.Qualsiasi aiuto sarebbe molto apprezzato.Grazie

È stato utile?

Soluzione

Questo è come lo faccio.Un punto importante:CoreData non memorizza i valori booleani, in modo che qualsiasi proprietà etichetta "boolean" in realtà è di tipo NSNumber.Hai avuto modo di ricordarsi di convertire avanti e indietro quando si tratta con CoreData e valori booleani.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSManagedObject *selectedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];


    if ([[selectedObject valueForKey:@"isDone"] boolValue]) {
        [selectedObject setValue:[NSNumber numberWithBool:NO] forKey:@"isDone"];
    } else {
        [selectedObject setValue:[NSNumber numberWithBool:YES] forKey:@"isDone"];
    }
}

Io ho il mio UITableViewController impostato come delegato per la NSFetchedResultsController, in modo che le modifiche che ho fatto di oggetti gestiti nella query ^^^ causa due metodi seguenti per essere eseguito.

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *defaultCellIdentifier = @"Item";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:defaultCellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:defaultCellIdentifier] autorelease];
    }

    NSManagedObject *item = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    cell.textLabel.text = [item valueForKey:@"name"];

    if ([[item valueForKey:@"checks"] boolValue]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}

Ecco come tutto ciò che lega insieme

  1. Utente fa clic su una riga
  2. tableView:didSelectRow...metodo cambia il "isDone", di proprietà dell'appropriato oggetto gestito.
  3. recuperati i risultati controllore si accorge che un oggetto gestito ha cambiato e chiama il controllerDidChangeContent metodo sul suo delegato.
  4. Il mio controllerDidChangeContent metodo di ricarica tutti i dati in tabella
  5. Quando la tableView viene ricaricato, il mio tableView:cellForRow...metodo di verifica la "isDone" di proprietà dell'elemento gestito per vedere se il cell dovrebbe avere un segno di spunta o non.

E per non confondersi, inizialmente ho usato un generico NSMangagedObject per memorizzare la riga di stato, che è il motivo per cui il primo metodo che ho postato dice, [selectedObject valueForKey:@"isDone"].Poi sono passato a una classe gestita oggetto denominato JKItem, che è il motivo per cui la seconda serie di metodi che è possibile utilizzare item.isDone senza la generazione di un avviso del compilatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top