Qual è il modo più semplice per aggiungere una riga in un UITableView con una stringa fornita dall'utente?
-
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?
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