Modificare la sezione Uaceabile BackgroundColor senza perdere il titolo della sezione
-
29-10-2019 - |
Domanda
Ho cambiato le sezioni di backgroundcolor/background delle mie sezioni di viste da tabella.
Sto usando la visione semplice della tabella. Non preoccuparti, fai funzionare senza problemi con questo codice:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *sectionView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 728, 40)] autorelease];
sectionView.backgroundColor = [UIColor greenColor];
//For using an image use this:
//sectionView.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"whiteBackground.png"]];
return sectionView;
}
Il problema ora è, Il titolo della sezione è sparito.
Sto impostando il titolo della sezione con questo codice:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if ([tableView isEqual:self.searchDisplayController.searchResultsTableView]){
return @"";
} else {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo name];
}
}
Sto ottenendo i titoli della sezione se non uso
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
Bisogno del tuo aiuto.
Molte grazie.
EDIT 1:
Grazie a Mutix:
Nel mio caso, la risposta sarebbe:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *sectionView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 728, 20)] autorelease];
sectionView.backgroundColor = [UIColor greenColor];
//sectionView.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"whiteBackground.png"]];
//Add label to view
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 728, 20)];
titleLabel.backgroundColor = [UIColor clearColor];
//section Title
if ([tableView isEqual:self.searchDisplayController.searchResultsTableView]){
titleLabel.text = @"";
} else {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
titleLabel.text = [sectionInfo name];
}
[sectionView addSubview:titleLabel];
[titleLabel release];
return sectionView;
}
Soluzione
Il viewForHeaderInSection
Scora il titleForHeaderInSection
metodo.
Per aggiungere un titolo alla tua intestazione quando si utilizza viewForHeaderInSection
Dovrai aggiungere un'etichetta alla vista dell'intestazione della sezione in questo modo:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *sectionView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 728, 40)] autorelease];
sectionView.backgroundColor = [UIColor greenColor];
//Add label to view
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 728, 40)];
titleLabel.text = @"title";
[sectionView addSubview:titleLabel];
[titleLabel release];
return sectionView;
}
Altri suggerimenti
Abbiamo una soluzione migliore per questo da iOS6 in poi:
C'è un metodo delegato
- (void)tableView:(UITableView *)tableView
willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
Puoi usare questo metodo come questo
-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
//Set the background color of the View
view.tintColor = [UIColor blueColor];
// Text Color
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
[header.textLabel setTextColor:[UIColor whiteColor]];
}
Implementa il metodo di seguito da UableViewDelegate e la vista dell'interfaccia utente necessaria.
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UITableViewHeaderFooterView()
view.contentView.backgroundColor = UIColor(white: 0.97, alpha: 1)
return view
}
Se è necessario modificare il piè di pagina, utilizzare un codice simile in ... ViewForFooterInsection .. Metodo
Vuoi disegnare il tuo carattere, usa una personalizzazione simile:
...
let label = UILabel(frame: CGRectMake(0, 0, CGRectGetWidth(tableView.bounds), tableView.sectionHeaderHeight))
label.font = UIFont(name: "HelveticaNeue", size: 14)!
label.text = self.tableView(tableView, titleForHeaderInSection: section)
view.contentView.addSubview(label)
view.textLabel.hidden = true
...
Basta aggiungere [titleLabel setBackgroundColor:[UIColor clearColor]];
Perché nel mio caso l'etichetta si sovrapponeva il colore verde.
~ Soluzione migliore iPhone 3.5 e 4 schermo ~
Imposta il colore posteriore o l'immagine di sfondo da questo codice. Qui non devi calcolare per l'altezza della sezione, basta impostare in XIB.
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *sectionView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width,tableView.sectionHeaderHeight)];
sectionView.backgroundColor = [UIColor greenColor];
return sectionView;
}