2012-02-29 15 views
6

Mam problemy z pobieraniem klawiatury w aplikacji na iPhone'a, ponieważ nawet w przypadku ustawienia kontrolera nie można go dotknąć z powodu faktu, że mam UITableView zajmowanie się resztą dostępnego ekranu.Jak zrezygnować z funkcji ReignFirstResponder po kliknięciu poza obszarem UITextField na UITableView

Byłem ciekawy, jak mogę zrezygnować z klawiatury aka firstResponder, klikając na UITableView? Czy istnieje sposób monitorowania zdarzenia dotykowego na UITableView, nawet jeśli nie jest to wybór klikalnej komórki.

Zasadniczo wiem, jak zrezygnować z klawiatury, jeśli komórka uruchomi zdarzenie, ale jeśli kliknę na nieklikalną część UITableView, nadal chciałbym, aby klawiatura zniknęła.

Odpowiedz

6

2 opcje:

  • W swojej viewController, odpowiedzi na stołu do przewijania zwrotnego i zrezygnować odpowiadającego
-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    [self.view endEditing:YES]; 
} 
  • Można Zawsze dodawaj UITapGestureRecognizer do stołu/widoku i zrezygnuj z odpowiedzi z t tutaj

Osobiście robię to zwykle na przewijanym stole, ponieważ nie lubię jednego stuknięcia, aby odrzucić klawiaturę.

+0

Dziękujemy, że UITapGestureRecognizer zrobił dokładnie to, co było mi potrzebne. Doceniam czas. Jestem pewien, że zwój też działa, po prostu potrzebowałem kranu w tym przypadku, ale zachowam zwój w moim ekwipunku na później. – Rob

3
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    UITapGestureRecognizer *doubleTap = 
      [[UITapGestureRecognizer alloc] 
      initWithTarget:self 
      action:@selector(tapDetected:)]; 
      doubleTap.numberOfTapsRequired = 1; 
      [self.tableView addGestureRecognizer:doubleTap]; 
      [doubleTap release]; 

    } 

- (IBAction)tapDetected:(UIGestureRecognizer *)sender 
{ 
    CGPoint p = [sender locationInView:self.tableView]; 

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p]; 

    if(indexPath == nil) 
    { 
    NSLog(@"empty"); 
    } 
    else 
    { 
    [textField resignFirstResponder]; 
    } 
} 

Myślę, że to pomoże ... spróbować ..

+1

Skończyło się na używaniu przewijania, ponieważ gdy umieściłem tapetę na widoku tabeli, komórki przestały czytać stuknięcia, przez co komórki nie przesłały komórek, ponieważ gest dotknął zdarzenia. Dziękuję i prawdopodobnie będę potrzebować tego kodu w innej sytuacji. – Rob

0
@property (weak, nonatomic) UITextField *activeTextField; // keeps track of whose keyboard is being displayed. 

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    self.activeTextField = textField; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // if (indexPath equal to something then) 
    [self.activeTextField resignFirstResponder]; 
} 
3

Dodawanie rozpoznawania gest kranu jest ciekawym rozwiązaniem, ale jest alternatywa i nie trzeba zakodować wszystko!

Możesz ustawić w Konstruktorze interfejsów właściwość keyboardDismissMode na "Odrzuć podczas przeciągania" dla widoku tabeli. Jest to właściwość odziedziczona po UIScrollView i kiedy przewijasz widok tabeli, klawiatura jest odrzucana.

Powiązane problemy