2017-10-01 4 views
0

J'ai écrit le code suivant pour ajouter une étiquette de texte au centre de la vue d'en-tête de section.Comment ajouter une étiquette et un UIButton à un en-tête tableViewSection dans Swift?

La deuxième moitié du code consiste à ajouter un UIButton dont la largeur est 100 et aligné sur le coin droit de l'en-tête de section.

Le résultat est le suivant: seule l'étiquette ajoutée apparaît au centre. Le bouton ne s'affiche pas du tout sur l'en-tête!

Pourriez-vous s'il vous plaît aider à indiquer où je vais mal dans la mise en œuvre? Je vous remercie.

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let headerView = UIView() 

    // code for adding centered title 
    headerView.backgroundColor = UIColor.gray 
    let headerLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 
     tableView.bounds.size.width, height: 28)) 
    headerLabel.textColor = UIColor.black 
    headerLabel.text = titlesList[section] 
    headerLabel.textAlignment = .center 
    headerView.addSubview(headerLabel) 

    // code for adding button to right corner of section header   
    let showHideButton: UIButton = UIButton(frame: CGRect(x:headerView.frame.size.width - 100, y:0, width:100, height:28)) 
    showHideButton.setTitle("Show Closed", for: .normal) 
    showHideButton.backgroundColor = UIColor.blue 
    showHideButton.addTarget(self, action: #selector(btnShowHideTapped), for: .touchUpInside) 

    headerView.addSubview(showHideButton) 

    return headerView 
} 

Répondre

1

Votre problème est cette ligne:

let headerView = UIView() 

Vous n'avez pas spécifié cadre taille et donc la ligne ci-dessous ne sera pas une taille reconnue pour votre showHideButton cadre:

let showHideButton: UIButton = UIButton(frame: CGRect(x:headerView.frame.size.width - 100, y:0, width:100, height:28)) 

Utilisez cette ligne à la place lorsque vous déclarez votre headerView:

let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 100)) 

Cela montrera les éléments suivants: enter image description here

1

let showHideButton: UIButton = UIButton(frame: CGRect(x:headerView.frame.size.width - 100, y:0, width:100, height:28)

La position X de votre bouton est la taille de l'headerView moins 100. Mais votre headerView n'a pas de cadre (let headerView = UIView()), ce qui signifie que sa largeur est 0. Ainsi votre bouton est positionné à X -100.

Je suppose que vous avez fait une faute de frappe, et destiné à positionner en fonction de la largeur de la table:

let showHideButton: UIButton = UIButton(frame: CGRect(x:tableView.bounds.size.width - 100, y:0, width:100, height:28)