我想在用户点击后退按钮时显示确认提醒。这就是我尝试添加操作的方式。
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "<", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.save(sender:)))
self.navigationItem.leftBarButtonItem = newBackButton
这工作正常,但我想要默认的后退按钮图像,而不是自定义标题。怎么做?
我也尝试了以下代码:
self.navigationItem.backBarButtonItem?.action = #selector(ViewController.save(sender:))
...但是也没有执行动作。
答案 0 :(得分:2)
这可能会有所帮助。这不会覆盖后退操作,但您可以执行其他任务。
目标c
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if(self.isMovingFromParentViewController)
{
//On click of back or swipe back
}
if(self.isBeingDismissed)
{
//Dismissed
}
NSLog(@"%d",self.isBeingDismissed);
NSLog(@"%d",self.isMovingFromParentViewController);
}
夫特
override func viewWillDisappear(_ animated: Bool)
{
super.viewWillDisappear(animated);
if self.isMovingFromParentViewController
{
//On click of back or swipe back
}
if self.isBeingDismissed
{
//Dismissed
}
}
答案 1 :(得分:1)
我找到了解决方法!
我在iOS 11和iOS 13上对其进行了测试,并且效果很好:)
protocol CustomNavigationViewControllerDelegate {
func shouldPop() -> Bool
}
class CustomNavigationViewController: UINavigationController, UINavigationBarDelegate {
var backDelegate: CustomNavigationViewControllerDelegate?
func navigationBar(_ navigationBar: UINavigationBar, shouldPop item: UINavigationItem) -> Bool {
return backDelegate?.shouldPop() ?? true
}
}
class SecondViewController: UIViewController, CustomNavigationViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
(self.navigationController as? CustomNavigationViewController)?.backDelegate = self
}
func shouldPop() -> Bool {
if (needToShowAlert) {
showExitAlert()
return false
} else {
return true
}
}
}
答案 2 :(得分:0)
我不知道你试图取得什么,但是当vieWillDisappear:
被召唤时,它不是一个可能的解决方案,你想做什么?这可能是一个匹配的入口点,没有摆弄其他答案中建议的后退按钮。
<强>更好强>
另一个选择是实施UINavigationControllerDelegate
,将控制器设置为delegate
,然后在navigationController(_:willShow:animated:)
中实施提醒。
查看here以供参考。
答案 3 :(得分:0)
您需要向导航栏添加自定义后退按钮,并向其添加操作
let backButton = UIBarButtonItem (image: UIImage(named: "ico-nav-prev")!, style: .plain, target: self, action: #selector(GoToBack))
self.navigationItem.leftBarButtonItem = backButton
self.navigationItem.hidesBackButton = true
func GoToBack(){
self.navigationController!.popViewController(animated: true)
}
答案 4 :(得分:0)
我认为answer应该完成这项工作。
您基本上使用默认样式创建按钮并注册选择器。
您可以尝试this代替 backButton 而不是leftButton:
<强>目标C 强>
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] init];
[desVC.navigationItem setBackBarButtonItem:backBtn];
<强>夫特强>
let backBtn = UIBarButtonItem()
self.navigationItem.backBarButtonItem = backBtn
答案 5 :(得分:0)
在ParentViewController
的{{1}}方法中调用此行代码而不是viewDidLoad
ChildViewController
从self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
ChildViewController
你会好的!如果您需要为此转换创建操作,我的意思是每当用户点击self.navigationItem.hidesBackButton = true
的后退按钮时。只需在ChildViewController
ChildViewController
<强>编辑:强>
ChildViewController
override func didMove(toParentViewController parent: UIViewController?) {
super.didMove(toParentViewController: parent)
if parent == nil {
} else {
}
}
ParentViewController
override func didMove(toParentViewController parent: UIViewController?) {
super.didMove(toParentViewController: parent)
if parent == nil {
NotificationCenter.default.post(name: NSNotification.Name.init("Post"), object: nil)
} else {
}
}
这是有效的,但有这样的问题:
警告:在演示文稿正在进行时尝试演示!
因此我不推荐。祝你好运