2012-07-07 11 views
7

Ho un campo di testo che è impostato per modificare il dataSource di tableView con ogni lettera inserita (e chiamare reloadData).UITableView reloadData fa in modo che UITextField resignFirstResponder

Ma per qualche motivo, ogni volta che viene inserita una lettera, la tastiera viene chiusa.

Qualcuno sa perché?

+1

Inserisci un codice dei metodi per iniziare la modifica del campo di testo e qualsiasi altro metodo pertinente, non possiamo aiutarti se non siamo in grado di vedere qual è il problema. – 8vius

+1

possibile duplicato di [UitableView reloadData si dimette primo risponditore] (http://stackoverflow.com/questions/6409370/uitableview-reloaddata-resigns-first-responder) – CodaFi

+0

@CodaFi lo hai inchiodato. Il campo testo si trovava in una cella personalizzata nella parte superiore della tabella, quindi quando ricarico i dati ricarica anche quella cella, rinunciando quindi a qualsiasi cosa al suo interno. GRAZIE!!! –

risposta

10

Il campo di testo è in fase di dimissione perché alle celle ricaricate viene inviato un messaggio -resignFirstResponder dovuto al fatto che la loro sopravvivenza non è garantita dopo una ricarica. Vedi questa domanda related per ulteriori informazioni.

+0

Una buona soluzione è l'aggiunta di un campo di testo nascosto alla vista e il passaggio al campo di testo quando ricarichi la tabella. Dopo aver ricaricato il tavolo, puoi riportare lo stato attivo sul campo di testo originale, per mantenere la tastiera aperta. [self.fakeTextField diventatoFirstResponder]; [self.tableView reloadData]; [self.textField performSelector: @selector (becomeFirstResponder) withObject: nil afterDelay: .01]; – hobosf

-3

Utilizzare questo metodo textFieldShouldReturn: e aggiungere UITextFieldDelegate delegato nel file yourClass.h. imposta delegato a yourTextfield e scrivi il seguente codice nel metodo viewDidLoad.

yourTextfield.delegate = self;

e anche implementare il textFieldShouldReturn: come segue come

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 

     [theTextField resignFirstResponder]; 

    return YES; 
} 

penso che sarà utile a voi.

Problemi correlati