2016-09-21 1 views
10

Вот что у меня есть на данный момент.Как изменить цвет заголовка раздела в виде таблицы?

enter image description here

Как относиться к этому так, что я могу изменить цвет текста, чтобы соответствовать мой список индексов? Раздел sectionForSectionIndexTitle хорошо работал для добавления правильного заголовка раздела, но как точно получить доступ к элементу заголовка?

Или это невозможно, и мне нужно перерисовать вид и добавить его с помощью viewForHeaderInSection?

+0

Да, вы должны добавить ярлык в viewForHeaderInSection. – Janmenjaya

+0

Хе человек, как вы добавили алфавит справа? –

+0

Его называют индексным списком. Heres vid https://www.youtube.com/watch?v=xYSKHna1KJk. Или другая ссылка с большим учебником. http://www.edumobile.org/ios/indexed-table-views-in-swift/ – AMAN77

ответ

26

вы можете использовать один из UITableViewDelegate «s метод

func tableView(tableView: UITableView, willDisplayHeaderView view:UIView, forSection: Int) { 
    if let headerTitle = view as? UITableViewHeaderFooterView { 
     headerTitle.textLabel?.textColor = UIColor.redColor() 
    } 
} 

swift3 и выше

func tableView(_ tableView: UITableView, willDisplayHeaderView view:UIView, forSection: Int) { 
    if let headerTitle = view as? UITableViewHeaderFooterView { 
     headerTitle.textLabel?.textColor = UIColor.red 
    } 
} 

объективном C

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

для справки я взял модель ответа от here

+0

Спасибо, отлично! – AMAN77

+0

Возможно, мой любимый ответ на SO. –

1

заказ Название:

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { 
    let title = UILabel() 
    title.font = UIFont(name: "SFUIDisplay-Light", size: 13)! 
    title.textColor = UIColor.redColor() 

    let header = view as! UITableViewHeaderFooterView 
    header.textLabel!.font=title.font 
    header.textLabel!.textColor=title.textColor 
    header.contentView.backgroundColor = UIColor.whiteColor() 
} 
2

Одно решение гильза (с помощью дополнительного цепочки):

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { 
    (view as? UITableViewHeaderFooterView)?.textLabel?.textColor = UIColor.red 
} 
+0

Как это отличается от решения @ Anbu.karthik? –

+0

^^ Результат тот же, но в этом случае используется дополнительная цепочка, что приводит к одной строке, а не к условию 'if let'. Я обновлю ответ, указав это –

0

Вы можете сделать свой собственный раздел название (заголовок/нижний колонтитул) вид, и это легко.

class BlackTableViewHeaderFooterView : UITableViewHeaderFooterView { 

    override init(reuseIdentifier: String?) { 
     super.init(reuseIdentifier: reuseIdentifier) 

     contentView.backgroundColor = .black 

     textLabel?.font = UIFont.preferredFont(forTextStyle: .body) 
     textLabel?.numberOfLines = 0 
     textLabel?.textColor = .white 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

class TableViewController : UITableViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.register(BlackTableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "\(BlackTableViewHeaderFooterView.self)") 
     // do other setup 
    } 

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
     let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "\(BlackTableViewHeaderFooterView.self)") 
     header.textLabel?.text = "" // set your header title 
     return header 
    } 
}