2012-04-30 16 views
39

Ho alcuni input di testo e posso nascondere la tastiera ogni volta che tocchi lo sfondo, ma solo quando sono entrato nel primo campo di testo nome textField1. ora questo codice dovrebbe essere semplice ma non riesco a capirlo, cosa sto facendo male ??nascondi tastiera ios

-(IBAction)backgroundTouched:(id)sender { 
[textField1 resignFirstResponder]; 
[buildLength resignFirstResponder]; 
[buildWidth resignFirstResponder]; 
[ridgeWidth resignFirstResponder]; 
[rafterWidth resignFirstResponder]; 
[hipWidth resignFirstResponder]; 
[eaveOverhang resignFirstResponder]; 
[spacing resignFirstResponder]; 

}

+0

Quale oggetto sta ricevendo il backgroundTouched ':' azione? È la vista? Qualche oggetto ti metti dietro tutto? Il modo in cui ho una tastiera da nascondere su iOS è di sovrascrivere 'touchesEnded: withEvent: 'di ViewController. Viene chiamato quando nessun altro oggetto è in grado di gestire un evento touch. Qui è dove mi dimetto il primo risponditore, anche se è necessario controllare "isFirstResponder" perché se non si consuma il tocco si suppone di chiamare super. – Russ

+0

Accetto con @Russ ... gli eventi di tocco sul controller di visualizzazione sono la soluzione più semplice. Ma è ancora misterioso se funziona per textField1. Perché non gli altri? La mia ipotesi sarebbe che gli altri handle non sono buoni (ad esempio che 'buildLength' non è inizializzato correttamente). – danh

risposta

2

Si può provare UITouch metodo, e in questo set l'oggetto campo di testo e chiamare resignFirstResponder quando mai si sfiora lo schermo della tastiera si dimetterà, spero che questo lavoro per voi.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [currentSelectedTextField resignFirstResponder]; 
} 
186

Se si vuole nascondere la tastiera quando si tocca un tasto e si dispone di più di un UITextFields nella vostra view, allora dovreste usare:

[self.view endEditing:YES]; 

Toccare un punto qualsiasi della vista, e la la tastiera scomparirà.

+0

Ho notato che in alcuni casi questo metodo funziona dopo un ritardo di circa 0,3 sec. Voglio dire, resignFirstResponder rimuove la tastiera immediatamente. Ma questo metodo no e dovresti usare performSelector dopo il ritardo a volte dopo averlo usato. – wzbozon

6

È inoltre possibile scorrere una serie di viste (ad esempio le sottoview di UIView) e abbandonare manualmente la tastiera, ciò è utile se non si desidera abbandonare TUTTE le sottoview all'interno di UIView padre.

- (void)viewDidLoad 
{ 
    self.view.userInteractionEnabled = TRUE; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    //Iterate through your subviews, or some other custom array of views 
    for (UIView *view in self.view.subviews) 
     [view resignFirstResponder]; 
} 
27

Prova questo:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[self view] endEditing:YES]; 
} 
Problemi correlati