我可能遗漏了一些基本的东西,但是我有两个名为ViewControllers(启动VC)和ListController的变量,一个名为ExamplesController的变量在selectedCell中声明,然后它的值由ListControllerListController函数根据用户点击的行在tableView中更改。当用户点击一个单元格时,didSelectRowAt indexPath将出现(通过IB中的segue),但是ExamplesController的值直到我返回selectedCell才改变。所以现在事情的执行顺序是:
ListController使用值0初始化
用户点击单元格(比如索引3)
selectedCell显示标题0
用户返回ExamplesController
ListController被赋予值3
这是代码的简化版本。

var selectedCell = 0

class ListController: UIViewController, UITableViewDelegate, UITableViewDataSource{

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedCell = indexPath.row
        print("Tapped on \(selectedCell)")
    }

}


class ExamplesController: UIViewController{

    @IBOutlet weak var chapterTitle: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        chapterTitle.text = "\(chapterTitles[selectedCell])"
    }

}

你知道我做错了什么吗?

最佳答案

您需要从vc本身而不是从单元格中挂接segue并在内部使用didSelectRowAt

self.performSegue(withIdentifer:"SegueName",sender:indexPath.row)

func prepare(for segue: UIStoryboardSegue,sender: Any?)  {
  if segue.identider == "SegueName"  {
     let des = segue.destination as! ExampleVC
     des.selectedCell = sender as! Int
  }
}

09-06 22:48