表内的UIButton不会触发

时间:2016-08-30 18:27:43

标签: ios swift uitableview uibutton

您好我试图弄清楚如何在故事板中的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!
}

我的sndFeedBackBtnUITableViewVibrantCellsendFeedBackBtn的引用来源,其类别为UITableViewVibrantCell。我究竟做错了什么?谢谢。

模拟器中的样子: enter image description here

2 个答案:

答案 0 :(得分:1)

在您的帖子中,您显示了一个UITableViewVibrantCell类,并使用“UITableViewVibrantCell”标识符将单元格取列,但将其转换为CellClassMenu

无论如何,最好为操作创建一个单元委托,让控制器决定实现,而不是每次单元格出列时都添加一个目标。你可以这样做:

UITableViewVibrantCell

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)
    }
}

TopratedVC

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)