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])
}
}