2013-06-06 4 views
0

Добрый день!Почему мой тег textFieldDidEndEditing не работает?

У меня есть UITableView и две ячейки с соответствующими UITextField. Я создал UITextField через цикл:

- (UITextField *)createInformationTextField:(NSString *)createInformationTextField createInformationPlaceholder:(NSString *)createInformationPlaceholder 
{ 
    for (int i = 0; i < 2; i++) { 
     informationTextField = [[UITextField alloc] initWithFrame:CGRectMake(120, 12, 170, 30)]; 

     informationTextField.autocapitalizationType = UITextAutocapitalizationTypeWords; 
     informationTextField.autocorrectionType = UITextAutocorrectionTypeNo; 
     informationTextField.placeholder = createInformationPlaceholder; 
     informationTextField.text = createInformationTextField; 
     informationTextField.adjustsFontSizeToFitWidth = YES; 
     informationTextField.clearButtonMode = UITextFieldViewModeAlways; 

     informationTextField.tag = i; 
    } 

    return informationTextField; 
} 

Мои cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    NSString *name; 
    NSString *address; 

    switch (indexPath.section) { 
     case 0: 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 

      switch (indexPath.row) { 
       case 0: 
        informationTextField = [self createInformationTextField:name createInformationPlaceholder:[NSString stringWithFormat:@"%d", informationTextField.tag]]; 

        cell.textLabel.text = @"Name"; 
        [cell addSubview:informationTextField]; 
        break; 

       case 1: 
        informationTextField = [self createInformationTextField:address createInformationPlaceholder:[NSString stringWithFormat:@"%d", informationTextField.tag]]; 

        cell.textLabel.text = @"Address"; 
        [cell addSubview:informationTextField]; 
        break; 

       default: 
        break; 
      } 

      break; 

     case 1: 
      switch (indexPath.row) { 
       case 0: 
        cell.textLabel.text = @"State"; 
        break; 

       default: 
        break; 
      } 

      break; 

     default: 
      break; 
    } 

    informationTextField.delegate = self; 

    return cell; 
} 

Я установил UITableViewзаполнитель, чтобы отобразить его соответствующий тег и оборотный штраф.

Скриншот:

enter image description here

Проблема заключается в моем textFieldDidEndEditing:

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    switch (textField.tag) { 
     case 0: 
      NSLog(@"Name Field. The tag is %d", textField.tag); 
      break; 

     case 1: 
      NSLog(@"Address Field. The tag is %d", textField.tag); 
      break; 

     default: 
      break; 
    } 
} 

Я попытался вывести его тег снова после пользователь вводит что-то в UITextField, но это то, что я вижу

2013-06-06 17:36:53.050 UITableUITextField[20387:c07] Address Field. The tag is 1 
2013-06-06 17:36:55.636 UITableUITextField[20387:c07] Address Field. The tag is 1 

Apple's Documentation

+0

и может PLS опубликовать ур код для добавления TextField – manujmv

+0

@manujmv внутри 'cellForRowAtIndexPath'? – Jahm

ответ

1

Вы звоните createInformationTextField метод для создания TextField. Я думаю, что вы вызываете этот метод из каждой ячейки. Поэтому, когда вы вызываете этот метод, он входит в цикл for, а после двух циклов возвращает текстовое поле с возвратом тега 1 для каждой ячейки. вот почему вы получаете тег 1 для каждого текстового поля. Попробуйте вызвать метод ниже из вашего cellForRowAtIndexPath: метод

- (UITextField *)createInformationTextField:(NSString *)createInformationTextField createInformationPlaceholder:(NSString *)createInformationPlaceholder index:(NSIndexPath*)indexPath 
    { 

     UITextField *informationTextField = [[UITextField alloc] initWithFrame:CGRectMake(120, 12, 170, 30)]; 

     informationTextField.autocapitalizationType = UITextAutocapitalizationTypeWords; 
     informationTextField.autocorrectionType = UITextAutocorrectionTypeNo; 
     informationTextField.placeholder = createInformationPlaceholder; 
     informationTextField.text = createInformationTextField; 
     informationTextField.adjustsFontSizeToFitWidth = YES; 
     informationTextField.clearButtonMode = UITextFieldViewModeAlways; 

     informationTextField.tag = indexPath.row; 

     return informationTextField; 
    } 
+0

Спасибо! Сейчас он работает. *Я надеюсь* – Jahm

0

установить тег в текстовом поле в течение цикла, как это.

nameTxtFld.tag = 0; 
addressTxtFld.tag = 1; 
+0

Привет. Спасибо за ваш очень быстрый ответ. Я изменил вопрос выше и добавил инструкцию ** для цикла **. Еще раз спасибо! – Jahm

+0

Добро пожаловать, дорогая, и теперь я вижу вашу ошибку в вашем коде. –

+0

Умм, могу я спросить, где? И/или, может быть, решение тоже? – Jahm

Смежные вопросы