我可能遗漏了一些基本的东西,但是我有两个名为ViewControllers
(启动VC)和ListController
的变量,一个名为ExamplesController
的变量在selectedCell
中声明,然后它的值由ListController
ListController
函数根据用户点击的行在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
}
}