您好我试图弄清楚如何在故事板中的UItable中的自定义单元格内调用UIButton。目前我有一个库创建一个侧面菜单工作得很好(这里有更多信息),我可以看到我在启动模拟器时放置的按钮。但是,当我点击按钮时,操作不已触发,您能否指导我如何实现此目标?
需要注意的重要事项表格是完全在故事板中创建的。
我在TopratedVC.swift
内的进度代码,以获取触发操作的按钮:
override func viewDidLoad() {
super.viewDidLoad()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewVibrantCell") as! CellClassMenu
cell.sendFeedBackBtn.tag = indexPath.row
cell.sendFeedBackBtn.addTarget(self, action: "sendFeedBackBtnAction:", forControlEvents: .TouchUpInside)
cell.contentView.userInteractionEnabled = false //tried with true as well, no difference
cell.bringSubviewToFront(cell.sendFeedBackBtn)
cell.userInteractionEnabled = true
return cell
}
func sendFeedBackBtnAction(sender: UIButton){
print("sendFeedBackBtnAction tapped")
}
我的UITableViewVibrantCell.swift
文件包含以下内容:
import UIKit
class UITableViewVibrantCell: UITableViewCell {
@IBOutlet var sendFeedBackBtn: UIButton!
}
我的sndFeedBackBtn
有UITableViewVibrantCellsendFeedBackBtn
的引用来源,其类别为UITableViewVibrantCell
。我究竟做错了什么?谢谢。
答案 0 :(得分:1)
在您的帖子中,您显示了一个UITableViewVibrantCell
类,并使用“UITableViewVibrantCell”标识符将单元格取列,但将其转换为CellClassMenu
?
无论如何,最好为操作创建一个单元委托,让控制器决定实现,而不是每次单元格出列时都添加一个目标。你可以这样做:
import UIKit
protocol UITableViewVibrantCellDelegate: NSObjectProtocol {
func buttonPressed(sender: UIButton)
}
class UITableViewVibrantCell: UITableViewCell {
var delegate: UITableViewVibrantCellDelegate?
@IBOutlet var feedbackButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
feedBackButton.addTarget(self, action: #selector(self.buttonPressed(_:)), forControlEvents: .TouchUpInside)
}
func buttonPressed(sender: UIButton) {
delegate?.buttonPressed(sender)
}
}
class TopratedVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewVibrantCell") as! UITableViewVibrantCell
cell.delegate = self
return cell
}
// MARK: - UITableViewVibrantCellDelegate
func buttonPressed(sender: UIButton) {
print("feedbackButton tapped")
}
}
答案 1 :(得分:0)
选择器(“sendFeedBackBtnAction:”)无法传递参数。 sendFeedBackBtnAction函数中不需要param,因为您只为此按钮调用它。所以改变我会把它改成简单......
func sendFeedBackBtnAction()
然后我还建议您将选择器更改为更新的快速版本......
cell.sendFeedBackBtn.addTarget(self, action: #selector(sendFeedBackBtnAction), forControlEvents: .TouchUpInside)