首页 > 解决方案 > swift tableview句子错误

问题描述

我正在尝试制作一个表格视图,用户可以在其中单击单元格,以便单元格打开一个新的 ViewController,它将导航栏标题设置为单击的单元格的标签。
它对我不起作用,因为当我单击一个单元格时,它会打开一个视图,该视图具有先前单击的单元格的值(不是当前单元格的值),然后再次打开一个新视图,其中标题是当前单元格的值。
我将视图控制器上传到 GitHub 存储库:https ://github.com/SiposPtr/stackoverflow

var selectedValue: String?
var numberOfFileToLoad: Int = 1
let cellak = [
    "Első",
    "Második",
    "Harmadik",
    "Negyedik",
    "Ötödik",
    "Hatodik",
    "Hetedik",
    "Nyolcadik",
    "Kilencedik"
]
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return cellak.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
    cell.textLabel?.text = cellak[indexPath.row]
    // Configure the cell...
    return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    selectedValue = cellak[indexPath.row]
    numberOfFileToLoad = indexPath.row + 1
    performSegue(withIdentifier: "gotoSentences", sender: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "gotoSentences"{
        let nextViewController = segue.destination as! ButtonEditViewController
        nextViewController.title = selectedValue
        nextViewController.numberOfFileToLoad = numberOfFileToLoad
    }
}

在此处输入图像描述

标签: iosswiftuitableview

解决方案


似乎segue执行了两次。如果您有segue从表格视图单元到下一个视图控制器的连接,则segue在选择单元后立即执行,然后didSelectRowAt调用方法。

您可以在方法中获取选定的行prepare for segue并将选定的数据传递给下一个视图控制器。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "gotoSentences"{
        if let nextViewController = segue.destination as? ButtonEditViewController,
            let indexPath = tableView.indexPathForSelectedRow {
                nextViewController.title = cellak[indexPath.row]
                nextViewController.numberOfFileToLoad = indexPath.row + 1
        }
    }
}

推荐阅读