Кнопка в ячейке просмотра таблицы не работает — swift

#ios #swift #uitableview #custom-cell

#iOS #swift #uitableview #пользовательская ячейка

Вопрос:

У меня есть кнопка в моей пользовательской ячейке 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() {
  

Комментарии:

1. Вы установили присвоенное свойство делегата self при отображении ячеек?

Ответ №1:

Пожалуйста, установите для делегата значение self.

В cellforRowIndexPath

 commentsTableViewCell.delegate = self
  

Где commentsTableViewCell — это пользовательский объект UITableViewCell

Комментарии:

1. Конечно! Я совершенно забыл об этом! Большое вам спасибо 🙂

Ответ №2:

Я предлагаю обработать действие кнопки ячейки в ViewController. Вы можете определить, какая кнопка была нажата, установив tag для нее значение a .

 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...

    }