如何在Swift中向tableViewSection标头添加标签和UIButton?

时间:2017-10-01 19:07:03

标签: ios swift uitableview uiview uibutton

我编写了以下代码,用于在节标题视图的中心添加文本标签。

代码的后半部分是添加宽度为100的UIButton并与节标题的右角对齐。

结果是:只有添加的标签显示在中心。该按钮根本不显示在标题上!

请你指点一下我在执行中出错的地方?谢谢。

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
}

2 个答案:

答案 0 :(得分:1)

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

按钮的X位置是headerView减去100的大小。但是headerView没有框架(let headerView = UIView()),这意味着它的宽度为0.因此,您的按钮位于X -100。

我想你输错了,并打算根据表的宽度定位它:

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

答案 1 :(得分:1)

你的问题是这一行:

let headerView = UIView()

您尚未指定任何框架尺寸,因此下面的行不会是showHideButton框架的可识别尺寸:

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

当您声明headerView

时,请使用此行
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 100)) 

这将显示以下内容: enter image description here