【发布时间】:2019-03-10 19:59:28
【问题描述】:
我可能在这里遗漏了一些基本的东西,但我有两个 ViewControllers,分别称为 ListController(starting VC) 和 ExamplesController,还有一个名为 selectedCell 的变量,它在 ListController 中声明,然后它的值在ListController tableView didSelectRowAt indexPath 函数基于用户点击的行。当用户点击一个单元格时,将显示ExamplesController(通过 IB 中的 segue),但在我返回 ListController 之前,selectedCell 的值不会改变。所以现在执行的顺序是:
selectedCell被初始化为 0用户点击一个单元格(比如说索引 3)
ExamplesController显示标题 0用户返回
ListController
selectedCell被赋值为 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])"
}
}
任何想法我做错了什么?
【问题讨论】:
-
嗨,罗伯特,我正在 IB 通过 segue 执行此操作:ibb.co/9T1djy0
-
如果在 IB 中设置了 ExamplesController 的 segue,那么在调用委托的
didSelectRowAt方法之前就会触发它,这就是导致您的问题的原因。最好是创建 segue 然后在 'didSelectRowAt' 方法中调用它,或者保留在 IB 中定义的 segue 并在视图控制器上使用prepare方法,该方法在第二个视图控制器出现之前执行. -
我明白了,感谢您的澄清。我已经尝试从 didSelectRow 函数内部展示 VC,并且成功了。
标签: ios swift variables variable-assignment