Swift sender.setTitle代码不可见?

时间:2019-10-21 16:03:23

标签: ios swift

我对发件人标题有疑问。我有一个按钮,我想根据某些条件更改标题。在这一点上,我制作了sender.setTitle()代码,但标题仅出现了0.5秒。它不可见,让我说得更清楚。我该如何解决? 这是我的代码:

    @objc func handleExpandCloseForAlim(sender: UIButton) {


    if (sender.tag == 1) {
        if keys[0] == 0 {
            sender.setTitle("titlesample", for: .normal)
            keys[0] = 1
        }else{
            keys[0] = 0
            sender.setTitle("titlesampleclose", for: .normal)
        }
        DispatchQueue.main.async {
            self.tableView.reloadData()
        }

    }

这是我的标题视图代码:

            let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 100))
        // code for adding centered title
        headerView.backgroundColor = .lightGray
        let headerLabel = UILabel(frame: CGRect(x: 0, y: 10, width: tableView.bounds.size.width, height: 28))
        headerLabel.textColor = UIColor.black
        headerLabel.text = "   Teslim Alınacağı Adres"
        headerLabel.font = UIFont.boldSystemFont(ofSize: 14)
        headerLabel.textAlignment = .left
        headerView.addSubview(headerLabel)

        // code for adding button to right corner of section header
        let button: UIButton = UIButton(frame: CGRect(x:headerView.frame.size.width - 100, y:8, width:100, height:28))
        button.setTitleColor(.black, for: .normal)
        button.titleLabel!.font = UIFont.boldSystemFont(ofSize: 14)
        button.layer.cornerRadius = 4
        button.tag = 1
        button.backgroundColor = UIColor.blue
        button.addTarget(self, action: #selector(handleExpandCloseForAlim(sender:)), for: .touchUpInside)

        headerView.addSubview(button)
        return headerView

1 个答案:

答案 0 :(得分:1)

上面的代码中有问题的部分是您要在 handleExpandCloseForAlim 中重新加载表格视图。由于tableView已重新加载,它将在您返回没有标题的headerView的地方调用tableView中的 viewForHeaderInSection 函数。这就是为什么您的标签不见了。

您可以通过将按钮标签作为ViewController中的字段来解决此问题。示例代码可能如下所示。

class YourViewController: UITableViewController {
    var buttonLabel: String = "titlesampleclose"
    .......
}
    let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 100))
        // code for adding centered title
        headerView.backgroundColor = .lightGray

        .........
        .........

        button.setTitle(buttonLabel,for: .normal)
        button.addTarget(self, action: #selector(handleExpandCloseForAlim(sender:)), for: .touchUpInside)

        headerView.addSubview(button)
        return headerView
@objc func handleExpandCloseForAlim(sender: UIButton) {


    if (sender.tag == 1) {
        if keys[0] == 0 {
            self.buttonLabel = "titlesample"
            keys[0] = 1
        }else{
            keys[0] = 0
            self.buttonLabel = "titlesampleclose"
        }
        DispatchQueue.main.async {
            self.tableView.reloadData()
        }

    }

希望有帮助。