Добавить UITableViewCell с UITextField динамически - PullRequest
2 голосов
/ 06 августа 2011

Я пытаюсь создать UITableView, в который я могу динамически добавлять и удалять строки, и в строках есть UITextField.Для добавления строк я использую код:

- (void) addRow
    {
        [nameArray addObject:[NSString stringWithFormat:@"%i", x]];
        [self.tableView reloadData];
        x++;
    }

И я просто делаю подсчет nameArray, чтобы узнать, сколько строк у меня в tableView.Затем внутри cellForRowAtIndexPath у меня есть следующий код

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    /*Default Apple-y stuff*/
    ...
    if ([indexPath row] == 0) {
        playerTextFieldZero = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 185, 30)];
        playerTextFieldZero.adjustsFontSizeToFitWidth = YES;
        playerTextFieldZero.placeholder = @"Name";
        playerTextFieldZero.textColor = [UIColor blackColor];
        playerTextFieldZero.returnKeyType = UIReturnKeyDone;
        playerTextFieldZero.backgroundColor = [UIColor whiteColor];
        playerTextFieldZero.autocorrectionType = UITextAutocorrectionTypeNo; // no auto correction support
        playerTextFieldZero.textAlignment = UITextAlignmentLeft;
        playerTextFieldZero.tag = 0;
        playerTextFieldZero.delegate = self;
        playerTextFieldZero.clearButtonMode = UITextFieldViewModeNever; // no clear 'x' button to the right
        [playerTextFieldZero setEnabled: YES];
        [cell addSubview:playerTextFieldZero];
        [playerTextFieldZero becomeFirstResponder];
        [playerTextFieldZero release];
    }
    ...
    /*More of those in here*/
    ...
return cell;
}

У меня есть несколько проблем с этим кодом.Первая проблема заключается в том, что я делаю заданное количество UITextFields, чтобы я мог вызвать их все в textFieldShouldReturn.Есть ли хороший способ для меня генерировать UITextFields, которые будут возвращаться, когда я нажимаю клавишу «Готово»?

Вторая самая большая проблема, с которой я сейчас поступаю, это то, что мои UITextFields очищаются каждый раз, когда я добавляюновый.Есть идеи почему?

1 Ответ

7 голосов
/ 06 августа 2011

Чтобы решить вашу первую проблему, я бы начал с вытягивания кода создания UITextField в метод.

- (UITextField*)textFieldForCell:(UITableViewCell*)cell withDelegate:(id<UITextFieldDelegate>*)delegate {
    UITextField textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 185, 30)];
    textField.delegate = self;
    ....
    [cell addSubview:playerTextFieldZero];
    [textField release];
}

Затем вызовите новый метод в вашем tableView: cellForRowAtIndexPath: method ...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    // Custom initialization code    
    [self textFieldForCell:cell withDelegate:self];
}

Теперь, чтобы убедиться, что ответ вашего UITextField на ключ возврата реализует метод textFieldShouldReturn: вашего UITextFieldDelegate (возможно, вашего UITableViewController), который всегда возвращает true ...

-(bool)textFieldShouldReturn:(UITextField*)textField {
    return YES;
}

Что касается вашей второй проблемы, я полагаю, что это результат прямого вызова reloadData. Это заставит ваш UITableView воссоздать его ячейки. Это, в свою очередь, воссоздает ваши UITextFields, и вы впоследствии теряете их состояние / текст. Я думаю, что вашим следующим логическим шагом будет введение модели (NSMutableArray), которая хранит состояние каждого UITextField. Вы можете начать с сохранения текста поля в массив после получения UITextFieldDelegate сообщения textFieldShouldReturn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...