tableview单元格上的按钮不起作用 - 快速

时间:2016-10-18 15:02:35

标签: ios swift uitableview custom-cell

我的自定义tableview单元格上有一个显示用户名称的按钮。
当您点击它时,您应该被带到他/她的个人资料但没有任何反应?

这是我的自定义tableview单元类(commentsTableViewCell.swift):

import UIKit

protocol commentsTableViewCellDelegate {
    func namesIsTapped(cell: commentsTableViewCell)
}


class commentsTableViewCell: UITableViewCell {

    @IBOutlet weak var nameButton: UIButton!
    @IBOutlet weak var commentLabel: UILabel!
    @IBOutlet weak var profilePic: UIImageView!
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var uidLabel: UILabel!

    var delegate: commentsTableViewCellDelegate?

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    @IBAction func nameIsTapped(sender: AnyObject) {
        //4. call delegate method
        //check delegate is not nil
        if let _ = delegate {
            delegate?.namesIsTapped(self)
        } else {
        print("Delegate is \(delegate)")
        }
    }
}

这是commentsTableViewController.swift的重要部分:

class commentsTableViewController: UITableViewController, commentsTableViewCellDelegate, UITextViewDelegate {

    @IBOutlet weak var commentLabel: UITextView!
    @IBOutlet weak var theLabel: UILabel!

    var dataGotten = "Nothing"
    var updates = [CommentSweet]()

    func namesIsTapped(cell: commentsTableViewCell) {
        //Get the indexpath of cell where button was tapped
        //let indexPath = self.tableView.indexPathForCell(cell)

        let allDataSend = cell.nameButton.titleLabel?.text!
        self.performSegueWithIdentifier("toDetailtableViewController", sender: allDataSend)

    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "toDetailtableViewController" {
            if let nextVC = segue.destinationViewController as? theProfileTableViewController {
                nextVC.viaSegue = sender! as! String
            }
        }

    }

    override func viewDidLoad() {

2 个答案:

答案 0 :(得分:6)

请将代表设置为自己。

在cellforRowIndexPath

commentsTableViewCell.delegate = self

其中commentsTableViewCell是自定义UITableViewCell对象

答案 1 :(得分:3)

我建议在viewController中处理单元格按钮的操作。您可以通过为其设置tag来识别已点击的按钮。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell

        cell.myButton?.tag = indexPath.row
        cell.myButton?.addTarget(self, action: #selector(), for: .touchUpInside)

        return cell
    }

    func namesIsTapped(tappedButton: UIButton) {
        // get the user (from users array for example) by using the tag, for example:
        let currentUser = users[tappedButton.tag]

        // do whatever you want with this user now...

    }