我正在使用单个UITableview来实现一个UIViewController。根据选择的UITableview行,UIViewController上的材质只有轻微的变化。
我之前已经完成了多个UIViewControllers,因为UIViewControllers之间有很多不同的东西,比如布局等。但是作为视图控制器之间唯一的一个简单区别,我想使用全局计数器变量。我想使用将计数器的值设置为所选行的值并全局存储该值。
我宣布柜台:
var counter: Int?
然后,当选择一行时,我将计数器值设置为该行并执行segue:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
counter = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)
}
在viewController中,我伪装成counter
的值为'nil'
。为什么是这样?我该如何解决呢?我知道这不是最好的做法,但在这种情况下我想尝试做的事情。
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
}
}
}