在导航之前强制用户在tableview中选择一行

时间:2017-08-16 00:19:00

标签: ios swift uitableview

我想确保用户在导航到另一个控制器之前从tableview控制器中显示的行列表(计划行)中选择一行。所以在didSelectRow方法中,我将一个布尔变量scheduleSelected设置为true。在我的viewWillDisappear中,我检查了scheduleSelected,它是false,然后我发出警报并重新加载tableview,所以我保持在同一个tableview而不是导航。它无法正常导航到另一个控制器,但确实会发出警报,为时已晚。

如何在导出当前tableview控制器之前强制用户选择一行?

可能有更简单的方法,而不是这个繁琐的程序。请告诉我。

 override func viewWillDisappear(_ animated: Bool) {
    if (scheduleSelected == false ) {
        let alertController = UIAlertController(title: "UIAlertController", message: "Select Row", preferredStyle: .alert)
        alertController.message = "Choose a Schedule"
        alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        present(alertController, animated: true, completion: nil)
        self.tableView.reloadData()
    }else {
        let viewController = storyboard?.instantiateViewController(withIdentifier: "Profiles" )
        UIApplication.shared.keyWindow?.rootViewController?.navigationController
         let tabController = UIApplication.shared.keyWindow?.rootViewController as! ViewTabBarController
        let navController = tabController.selectedViewController as! UINavigationController
        navController.popToViewController(viewController!, animated: true)
    }

}

1 个答案:

答案 0 :(得分:0)

如何使用按钮操作或使用segue导航出当前的tableview控制器。

如果你正在使用segue,那么你必须像下面这样处理这个代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (scheduleSelected == false ) {
        let alertController = UIAlertController(title: "UIAlertController", message: "Select Row", preferredStyle: .alert)
        alertController.message = "Choose a Schedule"
        alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        present(alertController, animated: true, completion: nil)
        self.tableView.reloadData()
    }
}