快速按钮按下动作两次加载tableview控制器

时间:2018-07-13 03:47:52

标签: ios swift uitableview

我有一个MeterTableviewController连接到具有两个设置的两个tableview控制器。第一个位置LocationListSegue从MeterTableviewController上的按钮直接连接到LocationListTableViewController。从MeterTableViewController的顶部连接到另一个Seeter MetersListSegue  MeterListTableviewviewController。

当我按下位置​​按钮时,LocationListTableViewController被加载两次。 我以为是因为我两次调用它:一次是通过按钮IBAction,另一次是通过Prepare,所以我评论了Prepare的代码,但仍然加载了两次。

但是MeterListTableViewController仅加载一次。

我不知道为什么按下按钮两次会加载控制器。有人可以告诉我吗?

@IBAction func chooseLocation(_ sender: Any) {
   self.performSegue(withIdentifier: "LocationListSegue", sender: self) 
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        /*
        if segue.identifier == "LocationListSegue"{
            let viewController:LocationListTableViewController = segue.destination as! LocationListTableViewController 
        }
       */
        if segue.identifier == "MetersListSegue"{
            let viewController2:MeterListTableViewController = segue.destination as! MeterListTableViewController

        }

    }

2 个答案:

答案 0 :(得分:1)

您已经从按钮中添加了segue以及segue动作,请删除其中之一

答案 1 :(得分:0)

删除故事板segue,并使用我的代码更改代码。这对您来说足够了。

@IBAction func chooseLocation(_ sender: Any) {
     let tableViewController = self.storyboard?.instantiateViewController(withIdentifier: "your identifier") as! MeterListTableViewController
    self.navigationController?.pushViewController(tableViewController, animated: true) 
}

如果要使用segue,请为UIButton删除IBAction并编写此代码。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "LocationListSegue"{
        let viewController:LocationListTableViewController = segue.destination as! LocationListTableViewController 
    } else if segue.identifier == "MetersListSegue"{
        let viewController2:MeterListTableViewController = segue.destination as! MeterListTableViewController
    }

}