2015-05-14 13 views
26

ho una serie di intestazioni che usoModifica sezioni intestazione colore di sfondo in UITableView utilizzando una matrice di intestazioni

let sectionHeaderTitleArray = ["test1","test2","test3] 

e stanno mostrato utilizzando

func tableView[tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
return self.sectionHeaderTitleArray[section] as String 
} 

Ora, tutto questo funziona bene ma vorrei modificare il colore di sfondo delle intestazioni in modo che siano più visibili (Colore più scuro)

qualsiasi idea se posso farlo in una linea semplice o devo usare una cella personalizzata in c Reate questo aggiornamento

grazie

//number of sections and names for the table 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return self.sectionHeaderTitleArray.count 
    } 

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     return self.sectionHeaderTitleArray[section] as String 
    } 
    func tableView(tableView: UITableView, ViewForHeaderInSection section: Int) -> UIView? { 
     return self.tableView.backgroundColor = UIColor.lightGrayColor() 
    } 
+2

possibile duplicato di [UITableView - cambia colore intestazione sezione] (http://stackoverflow.com/questions/813068/uitableview-change-section-header-color) – luk2302

+0

bene si restituisce un UIColor quando si aspetta un UIView. – Jaysbays

+0

è necessario impostarlo con returnedView.backgroundColor = UIColor.lightGrayColor() dove returnsView è l'UIView che si inizializza in func tableView (tableView: UITableView, viewForHeaderInSection sezione: Int) -> UIView? – Jaysbays

risposta

17

Invece di utilizzare il metodo di fonte

func tableView(_ tableView: UITableView,titleForHeaderInSection section: Int) -> String? 

dei dati, è possibile utilizzare il metodo delegato

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 

e semplicemente cu stomize the UIView restituito come desideri.

Per esempio impostare il testo del UILabeltextLabel al valore desiderato e il backgroundColor al UIColor desiderato.

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    var returnedView = UIView(frame: CGRectMake(x, y, width, height)) //set these values as necessary 
    returnedView.backgroundColor = UIColor.lightGrayColor() 

    var label = UILabel(frame: CGRectMake(labelX, labelY, labelWidth, labelHeight)) 
    label.text = self.sectionHeaderTitleArray[section] 
    returnedView.addSubview(label) 

    return returnedView 
} 
+0

Grazie ma posso usare il mio array di titoli titolo in questo – Jp4Real

+0

Quindi imposta la proprietà textLabel.text al titolo della sezione desiderato come suggerito :) – Jaysbays

+0

Ho bisogno di tutte le mie sezioni per avere lo stesso lightgreycolor – Jp4Real

3

Swift 3+

ho usato questo:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let headerView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 20)) 
    headerView.backgroundColor = .lightGray 

    let label = UILabel() 
    label.translatesAutoresizingMaskIntoConstraints = false 
    label.text = stringValues[section] 
    headerView.addSubview(label) 
    label.leftAnchor.constraint(equalTo: headerView.leftAnchor).isActive = true 
    label.rightAnchor.constraint(equalTo: headerView.rightAnchor).isActive = true 
    label.centerYAnchor.constraint(equalTo: headerView.centerYAnchor).isActive = true 
    label.heightAnchor.constraint(equalToConstant: 25).isActive = true 

    return headerView 

} 
12

Bisogna mantenere sia

titleForHeaderInSection

E

viewForHeaderInSection

Ecco alcuni codice di lavoro in Swift 3

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return self.sectionHeaderTitleArray[section] 
} 

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let returnedView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 25)) 
    returnedView.backgroundColor = .lightGray 

    let label = UILabel(frame: CGRect(x: 10, y: 7, width: view.frame.size.width, height: 25)) 
    label.text = self.sectionHeaderTitleArray[section] 
    label.textColor = .black 
    returnedView.addSubview(label) 

    return returnedView 
} 
+0

grazie ha funzionato molto –

32

Se si sta utilizzando solo titleForHeaderInSection:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { 
    (view as! UITableViewHeaderFooterView).backgroundView?.backgroundColor = UIColor.black.withAlphaComponent(0.4) 
} 
+3

Facilmente la risposta più semplice e migliore. Esattamente quello che stavo cercando. – Zig

+0

La risposta più semplice. Grazie. –

+0

La mia risposta! Grazie. – Sasho

4

SWIFT 4

Super facile, impostando la vista dell'intestazione, colore dello sfondo contentView ..

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "headerId") as! CustomHeader 
    header.contentView.backgroundColor = AnyColor 
    return header 
} 
+0

Questa risposta è un po 'incompleta ma sembra essere il metodo corretto. Come potrei andare a creare la vista dell'intestazione personalizzata con un ID univoco in primo luogo? Al momento ho visto molti metodi online che utilizzano solo una cella creata dall'utente che restituisce la vista del contenuto di quella cella. Sarebbe possibile per voi di espandere un po '? – WBuck

+0

Ho usato https://stackoverflow.com/questions/36926612/swift-how-creating-custom-view forheaderinsection-using-a-xib-file per riempire gli spazi vuoti – WBuck

0

Questo cambierà per tutte le intestazioni nell'applicazione:

UITableViewHeaderFooterView.appearance().backgroundColor = theme.subViewBackgroundColor 
1

Se si utilizza titleForHeaderInSection, quindi il modo più semplice è quello di aggiungere in viewDidLoad():

self.tableView.backgroundColor = UIColor.clear 

Per qualche motivo, l'impostazione di ClearColor per lo sfondo nella sezione Visualizza per TableView in Interface Builder non lo imposta sempre su trasparente. Ma aggiungendo questa riga nel codice (almeno per me) lo fa.

Problemi correlati