弹出或关闭 ViewController
Popping or dismissing a ViewController
我有一个反馈视图控制器,可在 4 个不同屏幕的 7 个位置访问。
它通过 pushViewController
在 navigationController
中呈现的一种方式。其他 6 次以模态方式呈现。
这是打开反馈VC的
的函数
struct Constants{
static func openFeedback(openFrom: UIViewController, nav:Bool) {
let fbStoryboard = UIStoryboard(name: "FeedbackViewController", bundle: nil)
let fbVC = fbStoryboard.instantiateViewController(withIdentifier: "FBSBID")
fbVC.modalPresentationStyle = .overFullScreen
fbVC.modalTransitionStyle = .crossDissolve
if nav {
openFrom.navigationController?.pushViewController(fbVC, animated: true)
} else {
openFrom.present(fbVC, animated: true, completion: nil)
}
}
}
使用 Constants.openFeedback(openFrom: self, nav: true)
或 Constants.openFeedback(openFrom: self, nav: false)
调用反馈 VC
打开 VC 效果很好!
这是我在反馈视图控制器上的关闭按钮:
@IBAction func closeButtonPressed(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
当不在导航堆栈中时,7 次中有 6 次有效。当它在导航堆栈中时,关闭按钮不会执行任何操作。
我的问题是,如何根据反馈视图控制器是否在导航控制器堆栈中来关闭它?
您可以通过检查控制器的 navigationController
是否为 nil
来简单地检查视图控制器是否嵌入在 UINavigationController
中。
因此,如果它是嵌入式的,您可以在导航控制器上使用 popViewController(animated:)
来 "dismiss" 推送控制器
if let navCon = navigationController {
navCon.popViewController(animated: true)
} else {
dismiss(animated: true)
}
我有一个反馈视图控制器,可在 4 个不同屏幕的 7 个位置访问。
它通过 pushViewController
在 navigationController
中呈现的一种方式。其他 6 次以模态方式呈现。
这是打开反馈VC的
的函数struct Constants{
static func openFeedback(openFrom: UIViewController, nav:Bool) {
let fbStoryboard = UIStoryboard(name: "FeedbackViewController", bundle: nil)
let fbVC = fbStoryboard.instantiateViewController(withIdentifier: "FBSBID")
fbVC.modalPresentationStyle = .overFullScreen
fbVC.modalTransitionStyle = .crossDissolve
if nav {
openFrom.navigationController?.pushViewController(fbVC, animated: true)
} else {
openFrom.present(fbVC, animated: true, completion: nil)
}
}
}
使用 Constants.openFeedback(openFrom: self, nav: true)
或 Constants.openFeedback(openFrom: self, nav: false)
打开 VC 效果很好!
这是我在反馈视图控制器上的关闭按钮:
@IBAction func closeButtonPressed(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
当不在导航堆栈中时,7 次中有 6 次有效。当它在导航堆栈中时,关闭按钮不会执行任何操作。
我的问题是,如何根据反馈视图控制器是否在导航控制器堆栈中来关闭它?
您可以通过检查控制器的 navigationController
是否为 nil
来简单地检查视图控制器是否嵌入在 UINavigationController
中。
因此,如果它是嵌入式的,您可以在导航控制器上使用 popViewController(animated:)
来 "dismiss" 推送控制器
if let navCon = navigationController {
navCon.popViewController(animated: true)
} else {
dismiss(animated: true)
}