2012-01-16 10 views
24

Tworzę widok tabeli z UITextField s dynamicznie.Ustaw fokus na UITextField w tableCell

l_textField = [[UITextField alloc] initWithFrame:TextFieldFrame]; 
l_textField.tag = cellRow; 

l_textField.delegate = self; 
l_textField.font = [UIFont boldSystemFontOfSize:14]; 
l_textField.textColor = [UIColor blackColor]; 
[l_textField setEnabled:YES]; 

[cell.contentView addSubview:l_textField]; 

A teraz chcę ustawić fokus na tym polu tekstowym, gdy użytkownik dotknie komórki. Piszę to

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath { 
    UITextField* field = (UITextField *) [tblView viewWithTag: newIndexPath.row]; 
    [field resignFirstResponder]; 
} 

Ale to nie działa

Odpowiedz

59

zmianę [field resignFirstResponder]; z [field becomeFirstResponder];

resignFirstResponder służy do usuwania klawiatury (focus) z pola tekstowego

+0

Nic nie stało, myślę, że to tak poniewaz ustawić tblView.allowsSelection = NO; I to wydarzenie się nie stało. Ale JEŚLI ustawiłem tblView.allowsSelection = YES; To select only cell = ( – nabiullinas

+0

Próbowałem zaimplementować takie podejście, ale to zwykle nie działa. Próba przypisania UITextField do [textField staćFirstResponder] musi ustawić zaznaczenie włączone lub ustawić na YES/true. –

1

mam do czynienia to samo wydać tutaj, nawet używając poprawnie [field becomeFirstResponder];.

Użyłem również znaczników, aby uzyskać obiekty, które mam w komórce. Twój didSelectRowAtIndexPath powinien wyglądać tak, aby uzyskać odpowiednią komórkę:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    currentRow = indexPath.row; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UITextField *indexField = (UITextField *)[cell viewWithTag:101]; 
    [indexField becomeFirstResponder]; 
} 

To działało jak urok dla mnie.

0

Swift 3

myTextField.becomeFirstResponder() 

mojego kodu. Wybierz ścieżkę indeksu aktualnej komórki. I zdobądź komórkę następnego pliku indexpath.row. I nazywa ** cell1.txtFindings.becomeFirstResponder() **

if let textFieldIndexPath = specsListView.indexPath(for: cell){ 
     let newIndexPath = IndexPath(row: textFieldIndexPath.row + 1, section: 0) 

     if let cell1: SpecsTableViewCell = specsListView.cellForRow(at: newIndexPath) as? SpecsTableViewCell{ 
      cell1.txtFindings.becomeFirstResponder() 
     } 
} 
Powiązane problemy