iOS обновление заголовка заголовка - PullRequest
0 голосов
/ 05 января 2012

У меня есть сгруппированная таблица с 3 категориями и одним заголовком над первой . Мне бы хотелось, чтобы после того, как пользователь вводил свое имя, заголовок заголовка обновлялся с именем этого человека. Я поместил метод reloadData в textFieldShouldReturn после того, как уволил первого респондента (клавиатуру). Похоже, это не работает. Заголовок заголовка остается прежним.

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if(section == 0 ) 
    {
        if(title==nil)
            return @"Your name here...";
        else
            return title;
    }
    else return nil;
}

title - это NSString, который должен содержать текст из заголовка ячейки.

Следующий код взят из cellForRowAtIndexPath ....

UITextField *txt = [[ UITextField alloc ] initWithFrame:CGRectMake(100,10, 200, 30)];``
    txt.delegate = self;
    [cell addSubview:txt];

    if(indexPath.section==0)
    {
        if([indexPath row] == 0)
        {
            [cell.textLabel setText:@"Name"];
            title = txt.text;

        }

Спасибо!

1 Ответ

0 голосов
/ 05 января 2012

Вы не дали понять, потому что вы не опубликовали достаточно кода из вашего cellForRowAtIndexPath метода, но вы, вероятно, пересоздаете UITextField каждый раз, когда вызывается cellForRowAtIndexPath (что очень много). Это также означает, что вы теряете память как сумасшедшие (и ваше приложение будет отклонено из-за загрузки в магазин приложений).

Чтобы это исправить, создайте ячейку UITableView в своем xib-файле и вставьте в нее UITextField (подключите IBOutlets к обоим), затем верните ячейку UITableView, когда вызывается cellForRowAtIndexPath для пути индекса, где вы хотите, чтобы текстовое поле было появляются.

В качестве альтернативы, вы можете создать ячейку UITableView программно (не в xib), инициализировать UITextField, как вы делали там, и назначить это переменной в вашем классе.

В любом случае вы хотите выделить и запустить UITextField только один раз, а только один раз. Если вы можете сделать это, вы можете позвонить title = txt.text; (вам также следует переименовать ваш UITextField во что-то более интуитивное, например nameLabel).

Посмотрите на этот связанный вопрос StackOverflow , чтобы узнать, как встроить UITextField в UITableViewCell.

...