Редактируемый tableHeaderView в UITableView (например, приложение контактов) - PullRequest
1 голос
/ 12 февраля 2010

В настоящее время я пытаюсь реализовать редактируемое представление сведений, используя сгруппированный UITableView.Мне бы хотелось, чтобы оно выглядело как приложение «Контакты»:

  • в состоянии просмотра оно должно отображать заголовок в виде простой метки (в Контактах это имя с ПРОЗРАЧНЫМ фоном).
  • в состоянии редактирования он должен отображать заголовок как редактируемый UITableViewCell (в Contact's the tableHeader? изменяется с простого текста с прозрачным фоном на стандартный UITableViewCell с белым фоном).

Я не совсемуверен, что лучший способ добиться этого.Сначала я попытался добавить заголовок как UILabel tableHeaderView (который прекрасно работает), но затем я не могу переключить это на UITableViewCell.Можно было бы удалить заголовок и добавить новый раздел при входе в режим редактирования.

В настоящее время я пытаюсь всегда использовать UITableViewCell и сделать его прозрачным в режиме просмотра и переключить его по умолчанию в режиме редактирования.Однако я не смог сделать UILabel UITableViewCell (который находится в UITableViewCellStyleDefault) прозрачным (хотя мне удалось сделать UITableViewCell прозрачным, но не textLabel внутри него).

Что такоелучший способ реализовать это поведение?

Ответы [ 2 ]

1 голос
/ 04 июля 2010

Я тоже это сделал (хотя спорный вопрос с изменениями в приложении «Контакты» в iOS4!) Мое решение использует два разных представления заголовков и переключается между ними на основе isEditing:

- (UIView *)infoHeaderAnimated:(BOOL)animated {
    UIView *header = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 90.0)] autorelease];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(98.0, 41.0, 221.0, 21.0)];
    label.font = [UIFont boldSystemFontOfSize:17.0];
    label.backgroundColor = [UIColor clearColor];
    label.text = baseEntity.labelText;
    [header addSubview:label];
    [label release];
    return header;
}

- (UIView *)editingHeaderAnimated:(BOOL)animated {
    UIView *header = [[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 90.0)] autorelease];
    UITableView *tv = [[UITableView alloc] initWithFrame:CGRectMake(78.0, 10.0, 240.0, 90.0) style:UITableViewStyleGrouped];
    tv.backgroundColor = [UIColor clearColor];
    tv.dataSource = self;
    tv.delegate = self;
    tv.rowHeight = 62.0;    //@@@ height of cell and frame depend on elements
    tv.tag = kEditingHeaderTag;
    editingHeaderTableView = [tv retain];
    [header addSubview:tv];
[tv release];   
    return header;
}
0 голосов
/ 01 марта 2010

То, что вы пытаетесь сделать, очень стандартно, рассмотрите возможность реализации этих протоколов в UITableViewDatasource, особенно titleForHeaderInSection & commitEditingStyle:

Configuring a Table View
– tableView:cellForRowAtIndexPath:  required method
– numberOfSectionsInTableView:
– tableView:numberOfRowsInSection:  required method
– sectionIndexTitlesForTableView:
– tableView:sectionForSectionIndexTitle:atIndex:
– tableView:titleForHeaderInSection:
– tableView:titleForFooterInSection:

Inserting or Deleting Table Rows
– tableView:commitEditingStyle:forRowAtIndexPath:
– tableView:canEditRowAtIndexPath:

Не забудьте выбрать тип вашего TableView как Группу вместо Обычного в Интерфейсном Разработчике.

...