Anupam Mishra
Anupam Mishra

Reputation: 3588

UITableView get titleForHeadersInSection swift

I want to set the title of the header in the section of UITableView. What is the syntax in swift to set the title of the header in the section.

func tableView( tableView : UITableView,  titleForHeaderInSection section: Int)->String
{
    switch(section)
    {
    case 2:
        return "Title 2"
        break
    default:
        return ""
        break
    }

}

func tableView (tableView:UITableView , heightForHeaderInSection section:Int)->Float
{

    var title = tableView.titleForHeaderInSection[section];
    if (title == "") {
        return 0.0;
    }
    return 20.0;
}

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

    var title = tableView.titleForHeaderInSection[section] as String
    if (title == "") {
        return UIView(frame:CGRectZero);
    }
    var headerView:UIView! = UIView (frame:CGRectMake(0, 0, self.tableView.frame.size.width, 20.0));
    headerView.backgroundColor = self.view.backgroundColor;

    return headerView;
}

Upvotes: 15

Views: 43032

Answers (4)

khushbu arthania
khushbu arthania

Reputation: 29

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if section == 0{
           return "Pass Your String For Header"
       }else{
          return "Pass Your String For Header"
     }
 }

Upvotes: 0

Harjot Singh
Harjot Singh

Reputation: 6927

Update Swift 5

Xcode - 11.4

func tableView( _ tableView : UITableView,  titleForHeaderInSection section: Int)->String? {
   switch(section) {
     case 1:return "Title of section header"
     default :return ""
   }
}

This will show header in caps lock. To make it in regular mode as you want to show it use this method along with the above mentioned:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let titleView = view as! UITableViewHeaderFooterView
    titleView.textLabel?.text =  "Title of section header"//titleView.textLabel?.text?.lowercased()
}

Upvotes: 2

Halfpint
Halfpint

Reputation: 4079

In order to call this method you must use the UITableViews titleForHeaderInSection method. This method will provide the index for the current section and you are required to return a String, the returned String will be set as the header.

In order to invoke this, lets assume we have an array of Strings called cars

cars = ["Muscle", "Sport", "Classic"]

We can then simply call

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
{
    // Ensure that this is a safe cast
    if let carsArray = cars as? [String]
    {
        return carsArray[section]
    }

    // This should never happen, but is a fail safe
    return "unknown"
}

This will return section titles in the order given above.

Upvotes: 5

HungryArthur
HungryArthur

Reputation: 1087

You can use the func already defined in your class i.e. :

self.tableView(tableView, titleForHeaderInSection: section)

For example, using your code:

func tableView( tableView : UITableView,  titleForHeaderInSection section: Int)->String {
   switch(section) {
     case 2:return "Title 2"

     default :return ""

   }
}

func tableView (tableView:UITableView , heightForHeaderInSection section:Int)->Float 
{

    var title = self.tableView(tableView, titleForHeaderInSection: section)
    if (title == "") {
        return 0.0
    }
    return 20.0
}

Upvotes: 18

Related Questions