2009-05-05 19 views
20

Ho una casella di immissione testo nella mia app per iphone, quando la si tocca nel simulatore, la tastiera si apre. Ma non c'è modo di sbarazzarsene. Altre pagine web forniscono soluzioni, senza spiegare perché dovrebbero funzionare, e non funzionano per me. Uno dice che rende la casella di testo delegare il tuo uiview, quindi chiama resignfirstresponder sull'oggetto, ma non viene mai chiamato. Qualche suggerimento? Qualcuno può spiegare cosa sta realmente succedendo? Posso capirlo da solo se sapessi qual'era il paradigma del design ...Come far sparire la tastiera nel simulatore iphone

Forse dovrei semplicemente mettere un pulsante "vai" così ho qualcosa da mettere a fuoco lontano dal campo di testo?

risposta

19

Un modo per farlo è quello di impostare un oggetto come delegato al campo di testo e implementare

- (BOOL)textFieldShouldReturn:(UITextField *)textField 

in cui si chiama [textField resignFirstResponder]

Questo farà sì che la tastiera a scomparire quando si spingono la tasto return/go/done (qualsiasi cosa tu abbia impostato il tasto in basso a destra della tastiera).

Vedere il riferimento UITextFieldDelegate per ulteriori informazioni.

+1

Quando prima di partire, ho trovato [il "Il tuo primo Tutorial applicazione iOS] (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/Articles/00_Introduction.html) per essere utile. Per ulteriori informazioni su questa risposta, consultare la sottosezione "Il delegato del campo di testo" in ["Implementazione del controller di visualizzazione"] (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/ articoli/06_ImplementingController.html). – sage

+1

Abbastanza semplice, ma perché non è questo il comportamento predefinito? Questo funziona però .. implementa l'interfaccia come sopra, e collega la connessione 'delegato' in IB al proprietario del file. – Bobby

+0

Sostituisco '[textField resignFirstResponder]' con il nome del mio campo di testo, come '[myTextField resignFirstResponder]', non riesco a farlo funzionare in alcun modo su xcode 4.2. – raffian

5

- (BOOL)textFieldShouldReturn:(UITextField *)textField nel proprio delegato viene chiamato quando si preme il pulsante di ritorno.

Si desidera chiamare [textField resignFirstResponder] e quindi restituire YES. Questo dovrebbe fare il trucco. Assicurarsi inoltre che il delegato sia impostato. In caso di dubbio, aggiungere un punto di interruzione o NSLog e verificare.

16

Per ignorare la tastiera, è possibile utilizzare Delegato campo di testo.

Per utilizzare questo attenersi alla seguente procedura ...
1. In viewController. h aggiungere la dichiarazione del delegato in questo modo:

@interface ViewController : UIViewController <UITextFieldDelegate> { 
    }
2. Nel viewController. m chiamata di questo metodo:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
3. Quindi scrivere un codice come questo:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
    }
4. passo finale è quello di impostare il delegato del textField:
- (void)viewDidLoad { 
     [super viewDidLoad]; 
     self.textField.delegate = self; 
    }

+0

Questo trucco funziona per tutti i campi di testo in una singola finestra? – raffian

+0

Sì, dovrebbe ... Ad ogni modo se si desidera applicare il delegato solo su determinati campi di testo, nel textFieldShouldReturn: metodo change [textField resignFirstResponder]; con [yourTextField resignFirstResponder]; – matteodv

+0

Impossibile ottenere questo funzionamento, ha fatto tutto, anche aggiunto 'myTextField.delegate = self' in 'initWithNibName' in ViewController, ma il delegato non viene mai chiamato – raffian

Problemi correlati