将一个字符串从TableView单元格传递到Swift 3中的视图控制器

时间:2018-01-18 06:00:25

标签: ios swift uitableview

在Swift 3中,我想将UITableView单元格中包含的字符串传递给后续的View Controller。

作为一个注释,我读了几个似乎特定于早期版本的Swift的答案,所以我想重新打开。例如,the last solution在这里看起来很简单,但我无法让它发挥作用。

TableViewController中,我使用此JSON提取创建了一个音频文件名称和日期的字符串:

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!)
            let testString = TableData.append(episode_date! + " | " + episode_name!)

// the part above runs and will add the string into each cell. now here, I want to pass the value of that string into a UILabel called episodeTitle in the target view controller

            func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
                if let indexPath = self.tableView.indexPathForSelectedRow {
                    let destinationVC = segue.cellPasser
                    EpisodeViewController.text = testString //this is the string in second view controller
                }
            }
        }
    }
}

这引发了两个错误:

  1. Value of type 'UIStoryboardSegue' has no member 'cellPasser'
  2. 在故事板中,我在Show segue中添加了一个名为'cellPasser'的标识符。我的信念是我应该可以在这里打电话,但它被标记了。

    1. EpisodeViewController.episodeTitle = testString
    2. 我在EpisodeViewController中有一个名为episodeTitle的插座,所以我想知道是否有一种除此之外的首选方式将字符串传递给这样的元素。

      我是Swift的新手 - 希望有人看到更好的方法来做到这一点。

      编辑:如果有用,这里是从segue链接的View Controller。

      class EpisodeViewController: UIViewController {
      
          override func viewDidLoad() {
              super.viewDidLoad()
      
              // Do any additional setup after loading the view.
          }
      
          @IBOutlet var episodeTitle: UILabel!
      

1 个答案:

答案 0 :(得分:1)

以下是将值从TableViewController传递到下一个ViewController的步骤:

    TableViewController中的
  1. 您应该声明一个didSelectRowAt方法。
  2. 声明为segue准备的方法
  3. 不要忘记在第二个视图Controller中声明变量。
  4. <强> 1

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

    <强> 2

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "Identifier" {
            let vc = segue.destination as! NameOfYourViewController
            vc.variableInSecondVc = variableInTableView
        }
     }
    

    第3

    var variableInSecondVc = ""