我正在使用一个UITableview设置到一个UIViewController。 根据选择的UITableview行,UIViewController上的材质只有很小的变化。
在选择多个UIViewController之前,我已经完成了此操作,因为UIViewController之间有很多不同之处,例如布局等。但是由于视图控制器之间只有一个简单的区别,我想使用全局计数器变量。 我想将计数器的值设置为所选行的值,然后将该值全局存储。
我宣布柜台:
var counter: Int?
然后,当选择一行时,我将计数器值设置为该行并执行segue:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
counter = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)
}
在viewController中,我设置为counter
的值为'nil'
。
为什么是这样?以及如何解决。
我知道这不是最佳做法,但这是我在这种情况下要尝试做的事情。
答案 0 :(得分:0)
counter
变量的值变为nil
,这是预期的。因为当您要选择一个新的控制器时,您没有分配计数器变量的值。您只需使用tableView
didSelect
方法更新现有控制器的计数器变量。有几个解决此问题的方法。在这里,我分享了最方便的一种。
class ViewController: UIViewController, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
var counter: Int?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
counter = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
if let destinationVC = segue.destination as? ViewController {
destinationVC.counter = counter
}
}
}