2013-08-15 20 views
5

Attualmente sto creando un'applicazione utilizzando UIPageViewController. Funziona come mi aspettavo fino a quando non raggiunge l'ultima pagina che contiene numeri di UITextField.Comportamento UIPageViewController inatteso

Ma quando ho toccato una delle istanze di UITextField, salta improvvisamente alla pagina precedente senza alcun motivo invece di mostrare una tastiera. Quando sfoglio l'ultima pagina e tocchi di nuovo un campo di testo, funziona bene senza problemi.

Va bene anche quando mostra immediatamente l'ultima pagina toccando il pulsante di navigazione che collega all'ultima pagina e che è collegato all'istanza UIPageViewController.

Questo problema si verifica solo quando si sfogliano le pagine dal primo all'ultimo e si verifica una sola volta al primo tentativo.

Sospettavo problemi di memoria insufficiente, quindi ho impostato i punti di interruzione nel metodo - didReceiveMemoryWarning dell'istanza di UIPageViewController e dell'ultimo controller di visualizzazione della pagina. Ma non furono mai chiamati.

Il secondo tentativo è che ho aggiunto un punto di interruzione nel metodo -willMoveToParentViewController: l'ultima pagina vista del controllore e impostare la condizione di parent == nil (quando viene rimossa dal controllore vista primaria, che è l'istanza UIPageViewController in questione)

Quando eseguire l'app, lo stack di chiamate del punto di interruzione dice che il metodo è chiamato da UIPageViewController's -_flushViewController:animated:.

Non so perché questo -flushViewController: animato: viene chiamato. Se riesco a capire la causa, mi aiuterà a risolvere il problema.

C'è qualcuno che può aiutarmi?

+0

Ciao! Eri in grado di capirlo? Sto soffrendo con lo stesso identico problema :( – VarunMurali

risposta

1

Non sono sicuro di cosa sia nel codice che esegue questa operazione, ma un probabile approccio per eseguire il debug di questo è cercare di rilevare l'evento di UITextField per verificare se si sta attivando correttamente.

anche cercare di impostare un punto di interruzione alla manifestazione della tua pagina viewWillAppear per controllare se tutte le UITextField s sono stati un'istanza correttamente - Ho il sospetto che nel punto in cui si è toccato il primo campo di testo non tutti hanno ancora istanziato , ovvero l'oggetto che riceve l'azione di tocco sarà il tuo UIPageViewController anziché lo UITextField.

0

ho trovato la risposta qui:

Cannot Impliment UITextview inside a UIPageViewController

Merito va completamente a lui.

Posso confermare che funziona. Ecco cosa ho fatto nel mio controller di visualizzazione:

//TextField 
    UIScrollView *textFieldScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; 
    textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, width, height)]; 
    [textField setText:@""]; 
    [textField setBackgroundColor:[UIColor whiteColor]]; 
    [textField.layer setCornerRadius:5.0f]; 
    [textField setDelegate:self]; 

    [textFieldScrollView addSubview:textField]; 
    [_someView addSubview:textFieldScroll]; 

Funziona come un fascino. Fammi sapere se hai altre domande.

Problemi correlati