从TableView生成全局变量计数器

时间:2019-03-02 11:07:36

标签: swift uitableview global-variables

我正在使用一个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'。 为什么是这样?以及如何解决。 我知道这不是最佳做法,但这是我在这种情况下要尝试做的事情。

1 个答案:

答案 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
        }
    }
}