ios - 在 Swift 3 中选择 UITableView 单元格后将字符串设置为 var

标签 ios swift uitableview uistoryboardsegue

我正在制作一个音频应用程序,我正在使用来自 JSON 的数据填充一个 TableView Controller 。根据用户的选择,我想将单元格中显示的 episode_name 传递到 segue 后的下一个 View 中。

到目前为止,表格加载了数据,我可以将本地定义的变量传递给下一个 View ,但我无法将单元格中的字符串复制到该变量中。

这是我的代码。

func extract_json(_ data: Data)
{
  //... removed to condense 
    if let shows_list = json as? NSArray
    {
        for i in 0 ..< data_list.count
        {
            if let shows_obj = shows_list[i] as? NSDictionary
            {
                let episode_name = shows_obj["episode"] as? String
                let episode_date = shows_obj["date"] as? String
                TableData.append(episode_date! + " | " + episode_name!)
            }
        }
    }

    DispatchQueue.main.async(execute: {self.do_table_refresh()})

}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: "passer", sender: indexPath)

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "passer" {

            let vc = segue.destination as! EpisodeViewController
            vc.variableInSecondVc = "Pass Variable" // this is where I want to pass episode_name

    }

} // end segue

我尝试过的解决方案:
1) 如果我立即调用 episode_name,它会标记它,因为该变量包含在先前的函数中,
2) 如果我尝试在 ViewDidLoad 中运行 extract_json 函数,它会导致代码中出现其他问题。

我是 Swift 的新手并且不确定 - 是否有更好的方法从该单元格“复制”字符串并将其传递给 vc.variableInSecondVc

编辑:一点澄清。如果我运行这段代码,它会成功地将后续的 UILabel 更改为“Pass Variable”——但当然,我实际上想通过更改它来将 PassVariable 动态化以反射(reflect)episode_name 的字符串。

最佳答案

performSegue(withIdentifier:sender:) 方法有两个参数,1. Segue 标识符,2. 您要传递的 AnyObject 类型的参数?

self.performSegue(withIdentifier: "passer", sender: indexPath)

prepare(for:sender:) 方法中,您检查 segue 标识符并将 sender 参数转换为您之前传递的类型,并从数组列表中获取数据以将其传递给下一个 View Controller 。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "passer" {
        guard let indexPath = sender as? IndexPath else { return }

        let data = TableData[indexPath.row] //write your logic here to get value from your data list based on index path row value and pass value to view controller.

        let vc = segue.destination as! EpisodeViewController
        vc.variableInSecondVc = data //value which you got from list based on indexPath
    }
}

关于ios - 在 Swift 3 中选择 UITableView 单元格后将字符串设置为 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48334958/

相关文章:

ios - 无法更新自动布局状态 : The agent crashed

swift - 在 Swift 中实例化关联类型的数组

swift - 如果我从 secondviewcontroller 返回,程序会复制 tableview 上的列表

ios - 将 UISearchBar 作为 subview 添加到 tableView header 中

导航栏上方的 iOS 空白空间?

Swift nodeAtPoint 难度

objective-c - 在文本中使用换行符时,UITableViewCell 删除按钮会搞乱 textLabel

ios - 使用自动布局、IB 和字体大小时,表头 View 高度错误

ios - 如何在 iOS 中的歌曲加载时间显示事件指示器

ios - 当我从侧面菜单打开时,标签栏不显示