首页 > 解决方案 > 覆盖函数准备(对于segue:UIStoryboardSegue,发件人:Any?)不起作用

问题描述

我有一个表格视图控制器,它的工作方式类似于图像的新闻提要,其中每个图像都是从 firebase 检索的。我希望能够点击每个图像并对另一个视图控制器执行 segue,该视图控制器具有一个表视图,该表视图具有自己的点击图像的唯一数据。使用我拥有的代码,override func prepare(for:sender)没有被调用,也没有错误。当点击图像但未执行 Show Segue 时,将在控制台中打印唯一的帖子 ID。

这是我在 HomeTableViewCell 中的代码:

protocol HomeTableViewCellDelegate {
    func goToSiteVC(postId: String)

}

class HomeTableViewCell: UITableViewCell {
    @IBOutlet weak var siteImageView: UIImageView!
    var delegate: HomeTableViewCellDelegate?

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.siteImageView_TouchUpInside))
        siteImageView.addGestureRecognizer(tapGesture)
        siteImageView.isUserInteractionEnabled = true
        // Configure the view for the selected state
    }

    @objc func siteImageView_TouchUpInside() {
        print("siteImageView_TouchUpInside")
        print(post?.id)
        if let id = post?.id {
            delegate?.goToSiteVC(postId: id)
        }
    }
}

这是我在 HomeViewController 中的代码:

class HomeViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    var posts = [Post]()
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.dataSource = self
        loadPosts()
    }

        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "SiteSegue" {
                let siteVC = segue.destination as! SiteViewController
                let postId = sender as! String
                siteVC.postId = postId
                print("segue")
            }
        }
    }


extension HomeViewController: HomeTableViewCellDelegate {
    func goToSiteVC(postId: String) {
        performSegue(withIdentifier: "SiteSegue", sender: postId)
    }
}

标签: iosswiftfirebasesegue

解决方案


该函数应该在viewDidLoad它之外必须在类范围内

class HomeViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    var posts = [Post]()
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.dataSource = self
        loadPosts()



    }

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "SiteSegue" {
                let siteVC = segue.destination as! SiteViewController
                let postId = sender as! String
                siteVC.postId = postId
                print("segue")
            }
        }

}

推荐阅读