首页 > 解决方案 > 从 tableview 生成全局变量计数器

问题描述

我正在使用一个 UITableview 连接到一个 UIViewController。根据选择的 UITableview 行,UIViewController 上的材料只有轻微的变化。

我在使用多个 UIViewControllers 之前已经完成了它,因为 UIViewControllers 之间有很多不同之处,例如布局等。但作为视图控制器之间的唯一一个简单区别,我想使用全局计数器变量。我想使用将计数器的值设置为所选行的值并全局存储该值。

我声明柜台:

var counter: Int?

Then when a row is selected I set the counter value to that row and perform a segue:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    counter = indexPath.row
    self.performSegue(withIdentifier: "dayx", sender: self)    
}

在 viewController 中,我选择counter'nil'. 为什么是这样?我该如何解决它。我知道这不是最佳实践,但这是我想在这种情况下尝试做的事情。

标签: swiftuitableviewglobal-variables

解决方案


变量的值counter成为nil预期。因为当你要segue一个新的控制器时,你没有分配计数器变量的值。您只需使用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
        }
    }
}

推荐阅读