2011-01-30 21 views

risposta

41

Sì, c'è, anche se ho il sospetto che fare ciò violerebbe le linee guida di Apple Human Interface.

Per fare ciò, aggiungere il seguente metodo al file di implementazione del controller di visualizzazione. Quindi imposta il controller di visualizzazione nel delegato del tuo campo di testo.

- (BOOL) textFieldShouldClear:(UITextField *)textField{ 
    [textField resignFirstResponder]; 
    return YES; 
} 

L'aspetto negativo di questo approccio è se vi capitasse di voler evitare che il campo di testo da cancellare, il codice diventa disordinato. Invece si potrebbe provare a definire un metodo personalizzato e quindi collegarlo al metodo valueDidChange e verificare un valore vuoto.

-(IBAction)hideKeyboardFromTextField:(id)sender{ 
    //TODO: Check if the previous value was longer than one character to differentiate 
    //between backspace and clear. 

    //check if the editing caused the box to be empty 
    if([[sender value] isEqualToString:@""] || [sender value] == nil) 
    [sender resignFirstResponder]; 
    } 
} 

Il problema qui è che non si può distinguere facilmente tra un tap sul pulsante chiaro e un tap sul pulsante Elimina quando c'è un carattere nel UITextField.

Come ho detto all'inizio della mia risposta, questo non è consigliabile in primo luogo e come le risposte qui riportate, non è così facile da implementare. Non penso che ne valga la pena, considerando la difficoltà di e il fatto che non si traduca in un'esperienza utente ottimale.

+0

+1 per la risposta dettagliata. grazie a tutti voi. –

1

In UITextFieldDelegate

 
- (BOOL)textFieldShouldClear:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 

Ma c'è un problema con questo. Dal manuale "Il campo di testo chiama questo metodo in risposta all'utente che preme il pulsante di cancellazione incorporato. (Questo pulsante non è mostrato di default ma può essere abilitato cambiando il valore nella proprietà clearButtonMode del campo di testo.) Questo metodo viene anche chiamato quando inizia la modifica e la proprietà clearsOnBeginEditing del campo di testo è impostata su YES. "

Si noti che questo metodo viene chiamato quando la modifica inizia se clearsOnBeginEditing è impostato su YES. Quindi, se chiami resignFirstResponder in questo metodo, la modifica non inizierà in realtà. Quindi è necessario impostare clearsOnBeginEditing su NO. Ovviamente, il campo di testo non verrà cancellato quando inizia la modifica.

Un altro IMPORTANTE non è direttamente correlato alla domanda. Nascondere la tastiera dopo aver toccato il pulsante Cancella non è un comportamento familiare e ad Apple NON piace modificare il comportamento degli articoli standard. Potresti ricevere un rifiuto per questo.

0

provare questo codice:

[TextField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1]; 
7

Questo codice è sicuramente lavorando per me per nascondere la tastiera mentre sgombrare il contenuto del campo di testo

- (BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    textField.text = @""; 
    return NO; 
} 
Problemi correlati