点击backBarButtonItem时消息怎样拦截

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点击backBarButtonItem时消息怎样拦截相关的知识,希望对你有一定的参考价值。

参考技术A 有一个方法可以解决,但解决的方法就是不使用默认的backbarbuttonitem ,也就是不使用当点击back后的事件响应。而是自定义back按钮。使用leftbarbuttonitem 来模拟back的回退动作。
我的意思是,你可以写一个超类superviewcontroller,在这个超类中,自定义一个按钮来充当back按钮,将这个按钮作为leftbarbuttonitem放到导航栏上。在超类中公开一个back方法,可以加一个默认的实现,就是pop到上一层。在需要自定义实现你上述说的控制器中,继承superviewcontroller,并重写超类中的back方法,在这个方法中你可以随意的处理你的逻辑。

如何使用 SWIFT 处理导航栏中 BackBarButtonItem 的点击事件?

【中文标题】如何使用 SWIFT 处理导航栏中 BackBarButtonItem 的点击事件?【英文标题】:How to handle click event of BackBarButtonItem in nav bar using SWIFT? 【发布时间】:2016-02-15 08:18:08 【问题描述】:

导航栏后退按钮被按下时,我试图处理一个动作。然而我已经为另一个 viewController 设置了 segue。

虽然我需要在用户点击 5 次后退按钮时保持 count。为此,我已经实现了这些东西。

在此我为导航栏后退按钮设置了一个操作:

class DetailViewController:UIViewController, UITabBarDelegate, UINavigationControllerDelegate
    override func viewDidLoad() 
        super.viewDidLoad()
        self.navigationItem.backBarButtonItem?.action = "perform"
        self.navigationController?.delegate = self
    

    func perform()
        if count == 5
            count=0
            print("Back Button pressed 5 times")
        
    

我在哪里做错了?

【问题讨论】:

你确定 backBarButtonItem 不是 Nil 吗?可能值得设置一个断点并确保您没有将其接线错误。 谢谢,现在可以了。 【参考方案1】:
import UIKit

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let backItem = UIBarButtonItem(title: "Back", style: .Plain, target: self, action: "tapToBack")
        self.navigationItem.leftBarButtonItem = backItem
    

    func tapToBack() 
        var times = 0
        times++
        NSLog("tap times:%d", times)
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    


【讨论】:

【参考方案2】:

应该是这样实现的:

override func viewDidLoad 
    super.viewDidLoad()
    self.navigationItem.hidesBackButton = true
    let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Bordered, target: self, action: "back:")
    self.navigationItem.leftBarButtonItem = newBackButton;


func back(sender: UIBarButtonItem) 
  // your code

【讨论】:

以上是关于点击backBarButtonItem时消息怎样拦截的主要内容,如果未能解决你的问题,请参考以下文章

通过操作将 UIBarButtonItem 设置为 backBarButtonItem,不起作用

navigationItem backBarButtonItem 标题

MFC使用ListControl时,第一次左键点击ListControl的列表时无法触发NM_CLICK消息,点击第二次时才能触发

怎样设置小程序不再提醒消息通知?

弹出视图控制器导致奇怪的 navigationItem / backBarButtonItem 标题交换

微信怎样设置锁屏弹窗提示消息