我正在通过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")
}
答案 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)