我有3个视图控制器
第一个RestaurantsViewController
第二个CategoryViewController
CartviewController
的三分之一
在CartviewController
中,我已将CartviewController
的所有项目的计数存储在UserDefault
中
现在,在CategoryViewController
中,如果用户单击导航控制器中的“后退”项目,则他们应查看RestaurantsViewController
但在此之前,我需要在显示之前先显示UIAlertController
RestaurantsViewController
我使用
override func willMove(toParent parent: UIViewController?)
{
super.willMove(toParent: parent)
if parent == nil
{
if UserDefaults.standard.integer(forKey: "arrayFoodSize") > 0
&& UserDefaults.standard.integer(forKey: "arrayFoodSize") != 0 {
let alert = UIAlertController(title: "delete all item ?", message: "delete all item !?",
preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "yes", style:
.destructive, handler: { (UIAlertAction) in
let realm = try! Realm()
try! realm.write {
realm.deleteAll()
}
let lvc =
self.storyboard?.instantiateViewController(withIdentifier:
"res_vc") as!
NavigationViewController
let appDelegate = UIApplication.shared.delegate as!
AppDelegate
appDelegate.window?.rootViewController = lvc
nil)
}))
alert.addAction(UIAlertAction(title: "no", style: .cancel,
handler: nil))
self.present(alert, animated: true)
}
}
最后,如果UIAlertAction的结果为“是”
我需要显示RestaurantsViewController
及其代码结果(如上所示)显示RestaurantsViewController
和UIAlertController
以及我需要什么,当我在UIAlertController
时先显示CategoryViewController
,然后再显示RestaurantsViewController
。
答案 0 :(得分:-1)
似乎没有本机的方法来拦截导航控制器的后退按钮的动作。 如果要拦截该操作,请显示警报,然后决定是否关闭视图控制器,我建议您使用自定义的后退按钮。
类似的东西:
override func viewDidLoad {
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(YourViewController.back(sender:)))
self.navigationItem.leftBarButtonItem = newBackButton
}
func back(sender: UIBarButtonItem) {
// Show alert here
}
然后,处理是否在警报中关闭当前视图的逻辑。
问题:用户仍然可以使用交换手势返回。
解决方案可能是:
// in viewDidLoad, set interactivePopGestureRecognizerDelegate as self
self.navigationController.interactivePopGestureRecognizer.delegate = self
然后,实现gestureRecognizerShouldBegin:
方法,返回 FALSE 以禁用该viewController中的手势,或者如果要保留该手势,则返回 TRUE ,但是您需要处理对应的逻辑。
gestureRecognizerShouldBegin:
的文档