2012-04-30 14 views
39

Mam kilka wprowadzeń tekstowych i mogę ukryć klawiaturę za każdym razem, gdy dotknę tła, ale tylko wtedy, gdy wkraczam do pierwszej nazwy pola tekstowego poleField1. teraz ten kod powinien być prosty, ale po prostu nie mogę go uzyskać, co robię źle?ukrywanie klawiatury ios

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

}

+0

Co obiekt odbiera 'backgroundTouched:' działanie? Czy to jest widok? Jakiś przedmiot, który położyłeś za wszystkim? Sposób, w jaki dostałem klawiaturę do ukrycia w systemie iOS, ma na celu zastąpienie elementu 'touchesEnded: withEvent:' kontrolki ViewController. Jest wywoływana, gdy żadne inne obiekty nie są w stanie obsłużyć zdarzenia dotyku. Tam jest miejsce, gdzie rezygnuję z pierwszej odpowiedzi, chociaż musisz sprawdzić 'isFirstResponder', ponieważ jeśli nie zużyjesz dotknięcia, powinieneś zadzwonić super. – Russ

+0

Zgadzam się z @Russ ... zdarzeniami dotykowymi na kontrolerze widoku jest prostszym sposobem. Ale nadal jest tajemniczy, jeśli działa na textField1. Dlaczego nie inni? Domyślam się, że inne uchwyty nie są dobre (np. Że "buildLength" nie jest poprawnie zainicjalizowany). – danh

Odpowiedz

2

Można spróbować UITouch sposób iw tym ustawieniu obiektu pola tekstowego i zadzwonić resignFirstResponder gdy kiedykolwiek dotknąć na ekranie klawiatura będzie zrezygnować, mam nadzieję, że to będzie pracować dla Ciebie.

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

Jeśli chcesz, aby ukryć klawiaturę po dotknięciu przycisku i masz więcej niż jeden UITextFields w twojej view, należy użyć:

[self.view endEditing:YES]; 

Tap gdziekolwiek na widoku, a klawiatura zniknie.

+0

Zauważyłem, że w niektórych przypadkach ta metoda działa po pewnym opóźnieniu wynoszącym maksymalnie 0,3 sekundy. Mam na myśli, że polecenie resignFirstResponder natychmiast usuwa klawiaturę. Ale ta metoda nie jest i powinieneś używać performSelector po pewnym czasie czasami po użyciu. – wzbozon

6

Można również iterować za pomocą szeregu widoków (takich jak podrzędne widoki UIView) i ręcznie zrezygnować z klawiatury, jest to dobre, jeśli nie chcesz zrezygnować z WSZYSTKICH subskrybów w swoim rodzimym UIView.

- (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

Spróbuj tego:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[self view] endEditing:YES]; 
} 
Powiązane problemy