Qual è il modo più semplice per aggiungere una riga in un UITableView con una stringa fornita dall'utente?

StackOverflow https://stackoverflow.com/questions/1607743

  •  05-07-2019
  •  | 
  •  

Domanda

Ho un UITableViewController semplice in un UINavigationController che visualizza un elenco di stringhe da un array con il pulsante Modifica / Fine predefinito sul lato destro della navigazione bar.

Quando si preme il pulsante Modifica, UITableView si anima correttamente e mostra le icone rosse meno da eliminare. Premendo il pulsante Elimina si rimuove la riga dalla vista tabella e dall'array (implementato nel tableView: commitEditingStyle: forRowAtIndexPath: del metodo UITableViewController ).

Vorrei ora consentire all'utente di aggiungere una riga alla vista (e aggiungere la stringa all'array sottostante), ma non sono sicuro di come procedere. Il metodo commitEditingStyle ha else if (editingStyle == UITableViewCellEditingStyleInsert) , ma non so come posso convincere l'utente a inserire la stringa.

Ho letto la Guida alla programmazione della vista tabella (più specificamente l'esempio dell'aggiunta di una riga di visualizzazione tabella ), ma questo sembra richiedere un nuovo UIViewController sottoclasse solo per ottenere una stringa dall'utente.

Non c'è modo più semplice?

È stato utile?

Soluzione

La creazione di un altro controller di visualizzazione sarà probabilmente il modo più semplice a lungo termine. Puoi presentarlo modalmente chiamando

SomeViewController* theViewController = [[SomeViewController alloc] init];
[self presentModalViewController: theViewController animated: YES];
[theViewController release];

Quando theViewController è pronto per andare via può chiamare

[[self parentViewController] dismissModalViewControllerAnimated: YES];

O puoi impostare un protocollo per il tuo nuovo controller di visualizzazione in modo che possa notificare il completamento del controller di visualizzazione originale e inviare un valore indietro, se desideri un NSString indietro potresti usare

@protocol MyViewControllerDelegate
- (void)myViewControllerDelegate: (MyViewController*)myViewController didFinishWithValue: (NSString*)theString;
@end

MyViewController avrebbe quindi una proprietà delegata

@interface MyViewController
{
    id<MyViewControllerDelegate> delegate;
}
@property(nonatomic,assign) id<MyViewControllerDelegate> delegate;
@end

Se si utilizza il metodo del protocollo, il controller della vista originale adotterà quel protocollo e respingerà la vista modale stessa quando riceve questo messaggio.

Spero che sia d'aiuto, all'inizio può sembrare un po 'complicato, ma rende molto semplice la raccolta di dati.

Altri suggerimenti

Puoi usare tu stesso un UIAlertView o una classe simile. Basta aprire la vista modale per richiedere la stringa, stabilire i callback giusti, quindi inserirlo nella tua origine dati.

Puoi anche inserire una cella con un UITextView e un tocco per modificare " segnaposto, quindi sui callback textView, rimuovere textView e visualizzare la stringa. Ulteriori modifiche dovrebbero essere approfondite o fare qualcos'altro

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