2015-05-14 3 views
26

У меня есть массив заголовков, которые я используюИзменение секции заголовка цвет фона в UITableView, используя массив заголовков

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

и они показали, используя

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

Теперь все это работает отлично но я хотел бы изменить цвет фона заголовков, чтобы они были более заметными (Darker Color)

любая идея, если я могу сделать это в простой строке или мне нужно использовать пользовательскую ячейку для c reate этот

благодаря

обновление

//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

Возможный дубликат [UITableView - цвет заголовка раздела заголовка] (http://stackoverflow.com/questions/813068/uitableview-change-section-header-color) – luk2302

+0

ну, вы возвращаете UIColor, когда он ожидает UIView. – Jaysbays

+0

вам нужно установить его с помощью returnView.backgroundColor = UIColor.lightGrayColor(), где returnView - это UIView, который вы инициализируете в func tableView (tableView: UITableView, viewForHeaderInSection: Int) -> UIView? – Jaysbays

ответ

17

Вместо того, чтобы использовать метод источника

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

данных, вы можете использовать метод делегата

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

и просто у.е. принесите UIView, как хотите.

Например установить текст UILabeltextLabel до нужного значения и backgroundColor до желаемой UIColor.

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

Спасибо, но я могу использовать мой массив заголовков разделов в этом – Jp4Real

+0

Итак, установите свойство textLabel.text в нужный заголовок раздела, как я предложил :) – Jaysbays

+0

Мне нужны все мои разделы, чтобы иметь тот же самый lightgreycolor – Jp4Real

3

Swift 3+

Я использовал это:

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

Вы должны держать обе

titleForHeaderInSection

И

viewForHeaderInSection

Вот некоторые рабочий код в 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

спасибо, что он очень сильно работал –

32

Если вы используете только titleForHeaderInSection:

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

Легко простейший, лучший ответ. Именно то, что я искал. – Zig

+0

Самый простой ответ. Благодарю. –

+0

Мой ответ! Благодарю. – Sasho

4

SWIFT 4

Super easy, устанавливая заголовок заголовка, 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

Этот ответ немного неполный, но кажется правильным методом. Как я мог бы сначала создать собственное представление заголовка с уникальным идентификатором? В настоящее время я видел много методов в Интернете, которые просто используют созданную пользователем ячейку, которая возвращает представление содержимого этой ячейки. Возможно ли, чтобы вы немного расширились? – WBuck

+0

Я использовал https://stackoverflow.com/questions/36926612/swift-how-creating-custom-viewforheaderinsection-using-a-xib-file, чтобы заполнить пробелы – WBuck

0

Это изменит его для всех заголовков в приложении:

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

Если вы используете titleForHeaderInSection, то самый простой способ добавить в viewDidLoad():

self.tableView.backgroundColor = UIColor.clear 

По какой-то причине установка ClearColor for Background в разделе View для TableView в построителе интерфейсов не всегда обеспечивает прозрачность. Но добавление этой строки в код (по крайней мере для меня).