在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
}
}
}
}
}
这引发了两个错误:
Value of type 'UIStoryboardSegue' has no member 'cellPasser'
在故事板中,我在Show segue中添加了一个名为'cellPasser'的标识符。我的信念是我应该可以在这里打电话,但它被标记了。
EpisodeViewController.episodeTitle = testString
我在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!
答案 0 :(得分:1)
以下是将值从TableViewController传递到下一个ViewController的步骤:
<强> 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 = ""