检测是否按下导航栏中的默认后退按钮

时间:2017-12-05 15:26:36

标签: ios uinavigationcontroller

我知道有这样的答案,比如制作自定义按钮,然后进行操作,但我不想用箭头更改默认的后退按钮,我也尝试过这样:

override func viewWillDisappear(_ animated : Bool) {
    super.viewWillDisappear(animated)
    if self.isMovingFromParentViewController {
     print("something")
    }
}

这里的问题是,即使按下我在该视图控制器中也有的保存按钮,也会调用此函数。我只需要在按下后退按钮时检测

2 个答案:

答案 0 :(得分:1)

在viewWillDisappear方法中,添加isMovingFromParentViewController属性:

if self.isMovingFromParentViewController {
    //do stuff, the back button was pressed
}

编辑:正如已经指出的那样,如果您只是在按下保存按钮时解除视图控制器,则需要Bool值来检查是否按下了保存按钮或默认后退按钮。

在班级的顶部,定义一个布尔值:

var saveButtonPressed = false

我假设你有一个@IBAction方法链接到你的保存按钮。如果你没有,那么我建议你添加这个连接。

在该方法中,将saveButtonPressed设置为true。

然后,在viewWillDisappear方法中,将其添加到if条件:

if (self.isMovingFromParentViewController && !saveButtonPressed) {
    //do stuff, the back button was pressed
}

答案 1 :(得分:0)

如果Xcoder提供的答案不符合您的要求,请检查此答案

https://stackoverflow.com/a/37230710/1152683

它包括创建自定义按钮,但带有箭头。检查整个代码的答案

使用非常简单

weak var weakSelf = self

// Assign back button with back arrow and text (exactly like default back button)
navigationItem.leftBarButtonItems = CustomBackButton.createWithText("YourBackButtonTitle", color: UIColor.yourColor(), target: weakSelf, action: #selector(YourViewController.tappedBackButton))

// Assign back button with back arrow and image
navigationItem.leftBarButtonItems = CustomBackButton.createWithImage(UIImage(named: "yourImageName")!, color: UIColor.yourColor(), target: weakSelf, action: #selector(YourViewController.tappedBackButton))

func tappedBackButton() {

    // Do your thing

}

编辑:

保持原始按钮

知道,对你而言,这不起作用

override func viewWillDisappear(_ animated : Bool) {
    super.viewWillDisappear(animated)
    if self.isMovingFromParentViewController {
     print("something")
    }
}

我只能假设当点击保存按钮时你导航到前一个屏幕,你必须在该功能中添加一个标志,然后像这样添加一个条件

override func viewWillDisappear(_ animated : Bool) {
    super.viewWillDisappear(animated)
    if self.isMovingFromParentViewController && !save {
       // back pressed
    }
}

作为保存变量,当点击保存按钮时,Bool变为真