ios - 覆盖 func 准备(对于 segue : UIStoryboardSegue, 发件人 : Any?)不工作

标签 ios swift firebase segue

我有一个 TableView Controller ,它的工作方式类似于图像的新闻提要,其中每个图像都是从 firebase 检索到的。我希望能够点击每个图像并执行到另一个 View Controller 的 segue,该 View Controller 具有一个 TableView ,该 View Controller 具有自己独特的点击图像数据。 使用我的代码,未调用 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)
    }
}

最佳答案

该函数应该在 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")
            }
        }

}

关于ios - 覆盖 func 准备(对于 segue : UIStoryboardSegue, 发件人 : Any?)不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51019387/

相关文章:

ios - -[UIView setAdUnitID1 :]: unrecognized selector sent to instance

ios - 'MyClass' 不可用 : cannot find Swift declaration for this class - Simulator

iphone - iOS App 不适用于其他语言

ios firebase 用户等于 nil

ios - Swift iOS - 标签 Collection View

ios - 当我尝试将其设为可选时遇到 : Unexpectedly found nil while unwrapping an Optional value,,我收到另一个错误

ios - 当应用程序在同一 View iOS Swift 时限制 segue

ios - SKAudioNode 不从 url 加载声音

android - Firebase 中的 ExceptionInInitializerError

ios - 从子节点 firebase 实时数据库 swift 4 中检索最后一个子节点