• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 通过 Swift 中的 segue 将点击的单元格数据传递到另一个 View

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:52:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 tableView,我正在尝试通过 segue 将与点击的单元格相关的数据发送到另一个 View 。 我的代码仅在第二次点击后才有效,并且在第一次点击时总是返回 nil。我想由于某种原因 prepareForSegue 首先被执行,这就是为什么 detailToSend 在第一次点击时总是为零,而第二次点击我从前一个点击的单元格中获取数据。我怎样才能解决这个问题 ? 更新:

var detailToSend = SingleRepository()

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if filteredResult.count > 0 {
        detailToSend = filteredResult[indexPath.row]
    } else {
        detailToSend = finalArrayUnwrapped[indexPath.row]
    }
    performSegue(withIdentifier: "showDetailSegue", sender: nil)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetailSegue" {
        let vc = segue.destination as! DetailViewController
        vc.detail = detailToSend
    }
}

我的 DetailViewController

class DetailViewController: UIViewController {


@IBOutlet weak var detailLabel: UILabel!

var detail: SingleRepository?

override func viewDidLoad() {
    super.viewDidLoad()

    if let detailUnwrapped = detail {
        print(detailUnwrapped)
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}



Best Answer-推荐答案


确保您已经从 Storyboard 中的 View Controller 对象而不是单元格中创建了转场;如果您从单元格创建转场,则转场将在调用 didSelectRowAt 之前触发。

正确设置segue后,可以使用sender参数来避免使用detailToSend属性:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    var detailToSend: SingleRepository
    if filteredResult.count > 0 {
        detailToSend = filteredResult[indexPath.row]
    } else {
        detailToSend = finalArrayUnwrapped[indexPath.row]
    }
    performSegue(withIdentifier: "showDetailSegue", sender: detailToSend)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? DetailViewController, let detailToSend = sender as? SingleRepository {            
        vc.detail = detailToSend
    }
}

关于ios - 通过 Swift 中的 segue 将点击的单元格数据传递到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52025355/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap