ios - 覆盖函数准备(对于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)
}
}
解决方案
该函数应该在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")
}
}
}
推荐阅读
- html - ngx-sharebuttons 中是否有 .css 版本的主题用于社交分享?
- json - JSON中的意外字符串在位置
通过邮递员寄送尸体 - android - “反应原生链接反应原生声音”不起作用
- javascript - 如何制作一个函数,在javascript中按降序排序并返回数组中重复次数最多的值?
- php - 为我的 CMS 解密或加密 rijndael 哈希时出现问题,这是 php 中的源代码
- reactjs - React 代理,服务器响应状态为 404 (Not Found)
- gremlin - 海王星小精灵中的排序(排序)非常慢
- r - 未生成图例或生成错误地分配给数据
- html - 角度旋转木马,旋转木马内的点击事件未按预期工作
- sql-server - 多列分组