我想确保用户在导航到另一个控制器之前从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)
}
}
答案 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()
}
}