以编程方式添加的按钮操作未被调用

时间:2017-12-14 06:14:35

标签: ios swift uitableview uibutton

我正在通过viewForFooterInSection的委托方法在我的TableView控制器中添加一个静态页脚视图,它工作正常,它正在添加我想要的设计,就像我想要的那样,但是按钮上的touchUpInside没有调用动作。我已经通过堆栈并尝试几乎所有的东西都无济于事。我可能做错了什么。这是我的代码

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let view = UIView()
    view.backgroundColor = UIColor.white

    let blackView = UIView()
    blackView.frame = CGRect(x: 0, y: 51, width: self.view.frame.size.width, height: 2)
    blackView.backgroundColor = UIColor.black
    view.addSubview(blackView)

    let button = UIButton()
    button.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 51)
    button.titleLabel?.font = UIFont.init(name: "Lato-Bold", size: 22)
    button.titleLabel?.textColor = UIColor.black
    button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)        
    view.addSubview(button)
    return view
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 53
}

@objc func buttonAction(sender: UIButton!) {
    print("Button tapped")
}

6 个答案:

答案 0 :(得分:1)

  

我试图检查你的代码,其工作正常的addTarget将被解雇

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        let view = UIView()
        view.backgroundColor = UIColor.gray

        let blackView = UIView()
        blackView.frame = CGRect(x: 0, y: 51, width: self.view.frame.size.width, height: 2)
        blackView.backgroundColor = UIColor.red
        view.addSubview(blackView)

        let button = UIButton()
        button.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 51)
        button.titleLabel?.font = UIFont.init(name: "Lato-Bold", size: 22)
        button.titleLabel?.textColor = UIColor.black
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        view.addSubview(button)
        return view
      }

      func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 53
      }

      @objc func buttonAction(sender: UIButton!) {
        print("Button tapped working fine")
      }

答案 1 :(得分:0)

上述问题的解决方案在这里

在您的班级中创建一个按钮动作功能buttonAction(_ sender: UIButton) 在添加按钮作为视图的子视图后,将操作分配给按钮button.addTarget(self, action: #selector(self.buttonAction(_ :)), for: .touchUpInside)以获取详细信息,我已在下面添加了代码段

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let view = UIView()
    view.backgroundColor = UIColor.white

    let blackView = UIView()
    blackView.frame = CGRect(x: 0, y: 51, width: self.view.frame.size.width, height: 2)
    blackView.backgroundColor = UIColor.black
    view.addSubview(blackView)

    let button = UIButton()
    button.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 51)
    button.titleLabel?.font = UIFont.init(name: "Lato-Bold", size: 22)
    button.titleLabel?.textColor = UIColor.black
    view.addSubview(button)
    button.addTarget(self, action: #selector(self.buttonAction(_ :)), for: .touchUpInside)        
    return view
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 53
}

func buttonAction(_ sender: UIButton) {
    print("Button tapped")
}

希望这会对你有所帮助

答案 2 :(得分:0)

我检查了你的代码,发现视图框有问题

添加此行,

view.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 53)

所以代码就像这样,

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let view = UIView()

view.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 53)

view.backgroundColor = UIColor.white

let blackView = UIView()
blackView.frame = CGRect(x: 0, y: 51, width: self.view.frame.size.width, height: 2)
blackView.backgroundColor = UIColor.black
view.addSubview(blackView)

let button = UIButton()
button.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 51)
button.titleLabel?.font = UIFont.init(name: "Lato-Bold", size: 22)
button.titleLabel?.textColor = UIColor.black
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)        
view.addSubview(button)
return view

}

答案 3 :(得分:0)

我尝试了你的代码。它工作正常我刚刚从方法定义中删除了override关键字,因为我使用的是Swift 4.0及更高版本。请检查代码中的以下内容,因为它可能会影响您的按钮点击问题。

<强> 1。检查是否有任何透明视图未覆盖tableView页脚。

<强> 2。检查层次结构中任何视图的userInteractionIsEnabled是否为false

第3。如果您在该层次结构中添加了任何视图,请检查点按手势。

答案 4 :(得分:-1)

好吧,我还没有得到积分。尝试修改两个地方:
1. #selector(buttonAction) - &gt; #selector(self.buttonAction(_:))。 /
2. @objc func buttonAction(发件人:UIButton!) - &gt;删除 @objc
如果无效,请自定义单元格并执行目标操作。它必须正常工作。

答案 5 :(得分:-2)

您的选择器名称缺少参数,使用 #selector(buttonAction(sender :))替换 #selector(buttonAction)