2010-05-13 10 views
5

W moim iPhone projektu używam UITableview z UITableViewCells zawierających UITextfields. Widziałem w wielu aplikacjach, że można użyć następnego przycisku, aby przejść do następnego pola tekstowego w następnej komórce. Jaki jest najlepszy sposób na osiągnięcie tego?iPhone: Przejdź do następnego uitextfield w uitableview, jak?

Mój pomysł polega na pobraniu z pola tekstowego, które jest w trakcie edycji, indexPath komórki, a następnie pobranie następnej komórki przez cellForRowAtIndexPath. Ale w jaki sposób mogę uzyskać indexPath komórki, którą aktualnie edytuję?

Dzięki!

Odpowiedz

8
  1. Zachowaj odwołania do instancji UITextField w widoku tabeli.
  2. Przypisz unikatowe wartości znaczników do instancji UITextField.
  3. W ostatnim polu tekstowym, można ustawić jej typ klawisza return, która zmienia klawisz Return etykietę klawiatura jest z „Next”, aby „Gotowe”: [finalTextField setReturnKeyType:UIReturnKeyDone];

w metodzie UITextField delegata -textFieldShouldReturn:, spacer po odpowiedzią:

- (BOOL) textFieldShouldReturn:(UITextField *)tf { 
    switch (tf.tag) { 
     case firstTextFieldTag: 
      [secondTextField becomeFirstResponder]; 
      break; 
     case secondTextFieldTag: 
      [thirdTextField becomeFirstResponder]; 
      break; 
     // etc. 
     default: 
      [tf resignFirstResponder]; 
      break; 
    } 
    return YES; 
} 
+0

Dzięki! Ale po prostu śledzę bieżące pole tekstowe, ponieważ istnieje wiele pól tekstowych. Czy mogę w jakiś sposób uzyskać następne pole tekstowe bez użycia tagów? – Mrbiggerm

+0

Oczywiście, po prostu zachowaj odniesienia do nich, 'UITextField * firstTextField', lub użyj tablicy itp. Jednak tagi to prawdopodobnie najszybszy sposób identyfikacji pola tekstowego uczestnika. –

+0

Ale jeśli nie chcę śledzić wszystkich pól tekstowych lub tagów? Czy w jakiś sposób mogę uzyskać bieżącą komórkę, w której znajduje się aktualnie edytowane pole tekstowe, a następnie uzyskać ścieżkę indeksu? – Mrbiggerm

0

Przyjmując UITextField dodano do UITableViewCell jak poniżej

UITableViewCell *cell; 
UITextField *textField; 
... 
textField.tag = kTAG_TEXTFIELD; 
[cell.contentView addSubview:textField]; 
... 

można uzyskać bieżącą ścieżkę indeksu poprzez

-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
    if([textField.superView.superView isKindOfClass:[UITableViewCell class]]) { 
    UITableViewCell *cell = (UITableViewCell *)textField.superView.superView; 
    NSIndexPath *indexPath = [self.myTableView indexPathForCell:cell]; 
    } 
    ... 

następnego wiersza w UITextField będzie wówczas

NSIndexPath *indexPathNextRow = [NSIndexPath indexPathForRow:(indexPath.row+1) inSection:indexPath.section]; 
UITableViewCell *cellNextRow = (UITableViewCell *)[self.myTableView cellForRowAtIndexPath:indexPathNextRow]; 
UITextField *textFieldNextRow = (UITextField *)[cellNextRow.contentView viewWithTag:kTAG_TEXTFIELD]; 

Nadzieję, że to pomaga!

+0

W iOS7 należy zastąpić textField.superView.superView za pomocą textField.superView.superView.superView – Homam