Domanda

Ho un'applicazione di dati di base che utilizza un controller di navigazione di drill-down per una vista di dettaglio e quindi se si modifica una delle righe di dati nella vista di dettaglio si ottiene portato in una modifica View per il che singola linea, come a Mele CoreDataBooks esempio (tranne CoreDataBooks solo utilizza un UITextField da sola, non uno che è una visualizzazione secondaria di UITableViewCell come il mio)!

La vista di modifica è un UITableviewController che crea la sua tabella con una singola sezione singola riga e un UITextfield nella cella, programatically.

Quello che voglio che accada è quando si seleziona una riga da modificare e la vista di modifica è inserito nello stack nav e la vista di modifica è animato in movimento attraverso lo schermo, voglio che il campo di testo per essere selezionato come firstResponder modo che la tastiera è già mostrando come la vista si sposta attraverso lo schermo alla posizione prendere. Come nella applicazione Contatti o in App CoreDataBooks.

Al momento ho il seguente codice nella mia app che fa sì che la vista del carico e poi si vede apparire la tastiera (che non è quello che voglio è, voglio la tastiera per essere già lì)

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [theTextField becomeFirstResponder];
}

Non è possibile mettere questo in -viewWillAppear come il campo di testo non è stato creato eppure così theTextField è pari a zero. In App CoreDataBooks dove si realizzano quello che voglio caricano la loro visione di un pennino in modo da utilizzare lo stesso codice, ma in -viewWillAppear come è già stato creato il campo di testo!

C'è comunque di ottenere intorno a questo senza creare un pennino, voglio mantenere la programmatico di attuazione per consentire una maggiore flessibilità.

Molte grazie

È stato utile?

Soluzione

Dopo aver parlato con il Dev Team di Supporto Apple, ho una risposta!

Quello che dovete fare è creare un fuori campo UITextField in -(void)loadView; e poi impostarlo come first responder poi sul metodo viewDidLoad è possibile impostare il UITextField nella UITableViewCell essere il primo responder. Ecco qualche esempio di codice (ricordo che sto facendo questo in un UITableViewController così sto creando tableView così!

- (void)loadView
{
    [super loadView];

    //Set the view up.
    UIView *theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.view = theView;
    [theView release];

    //Create an negatively sized or offscreen textfield
    UITextField *hiddenField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, -10, -10)];
    hiddenTextField = hiddenField;
    [self.view addSubview:hiddenTextField];
    [hiddenField release];

    //Create the tableview
    UITableView *theTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStyleGrouped];
    theTableView.delegate = self;
    theTableView.dataSource = self;
    [self.view addSubview:theTableView];
    [theTableView release];

    //Set the hiddenTextField to become first responder
    [hiddenTextField becomeFirstResponder];

    //Background for a grouped tableview
    self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    //Now the the UITableViewCells UITextField has loaded you can set that as first responder
    [theTextField becomeFirstResponder];
}

Spero che questo aiuta chiunque bloccato nella stessa posizione come me!

Se chiunque altro può vedere un modo migliore per fare questo si prega di dire.

Altri suggerimenti

Prova farlo in modo viewDidAppear, funziona per me.

Credo la soluzione ovvia è creare il campo di testo nel metodo init del controller della vista. Che di solito è possibile configurare la vista a causa di un controller di vista richiede una proprietà della vista popolato.

Quindi è possibile impostare il campo di testo come first responder in viewWillAppear e la tastiera dovrebbe essere visibile come le diapositive vista in.

Hai provato a usare i metodi UINavigationController delegato:?

navigationController: willShowViewController: animato:

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