objective-c iphone uitableview ipad ios7

objective c - ¿Cómo implementar `viewForHeaderInSection` en el estilo iOS7?



objective-c iphone (6)

Al principio del ciclo de vida de su controlador de vista (por ejemplo, -viewDidLoad ), registre la clase:

[[self tableView] registerClass:[UITableViewHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"headerFooterReuseIdentifier"];

Luego, en su método: (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section deque una celda, le da el estilo que desee y la devuelve:

UIColor *titleColor = ... // Your color here. UITableViewHeaderFooterView *headerFoorterView = [[self tableView] dequeueReusableHeaderFooterViewWithIdentifier:@"headerFooterReuseIdentifier"]; [[headerFooterView textLabel] setTextColor:titleColor]; return headerFooterView;

Y así es como usas una implementación por defecto.

Cómo implementar (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section en estilo iOS7 como (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section ¿funciona la (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section ?

PD: Solo necesito cambiar el color del título de encabezado de UITableView y guardar su estilo.


Funciona exactamente como en iOS 6. Cree una vista (o simplemente una etiqueta que cubra todo el encabezado) y ajústela según sus requisitos.


No es perfecto pero la solución:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UILabel *label = [[UILabel alloc] init]; label.textColor = [UIColor whiteColor]; label.backgroundColor = [UIColor clearColor]; if (<is_iOS7>) { label.text = [[NSString stringWithFormat:@" %@", <title>] uppercaseString]; } else { if (<is_iPad>) { label.text = [NSString stringWithFormat:@" %@", <title>]; } else { label.text = [NSString stringWithFormat:@" %@", <title>]; } } return label; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 38.f; }


Puede cambiar el color de una etiqueta dentro de un encabezado de vista de tabla estándar antes de renderizar con willDisplayHeaderView. También funcionará tanto para iOS6 / iOS7.

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { if([view isKindOfClass:[UITableViewHeaderFooterView class]]){ UITableViewHeaderFooterView *tableViewHeaderFooterView = (UITableViewHeaderFooterView *) view; tableViewHeaderFooterView.textLabel.textColor = [UIColor blueColor]; } }

Para referencia

UITableViewHeaderFooterView : https://developer.apple.com/documentation/uikit/uitableviewheaderfooterview

Protocolo UITableViewDelegate : https://developer.apple.com/documentation/uikit/uitableviewdelegate/1614905-tableview


Si necesita cambiar el color global para el encabezado y el pie de página, use la appearance :

[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setTextColor:[UIColor redColor]];


Y la respuesta de @ aumansoftware también es la mejor manera de agregar contenido en el encabezado estándar, como un botón. Aquí hay un ejemplo en Swift:

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { if (view.isKindOfClass(UITableViewHeaderFooterView)) { let headerView = view as UITableViewHeaderFooterView // Label headerView.textLabel.textColor = UIColor.blueColor() // New Button let addPeopleButton: UIButton = UIButton.buttonWithType(.ContactAdd) as UIButton addPeopleButton.addTarget(self, action: "showPeoplePicker:", forControlEvents: UIControlEvents.TouchUpInside) addPeopleButton.setTranslatesAutoresizingMaskIntoConstraints(false) headerView.addSubview(addPeopleButton) let right: NSLayoutConstraint = NSLayoutConstraint(item: addPeopleButton, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: -12) let vertical: NSLayoutConstraint = NSLayoutConstraint(item: addPeopleButton, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0) headerView.addConstraints([right, vertical]) } }