禁用长按返回按钮(标注菜单) [英] Disable Long Press back Button (callout menu)

查看:15
本文介绍了禁用长按返回按钮(标注菜单)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

iOS14 引入了长按后退按钮,该按钮打开一个标注菜单以返回到堆栈中的特定 VC.

iOS14 introduced that long-press on back button which opens a callout menu to go back to specific VC in stack.

我想禁用它,有没有可能做这样的事情,如果是的话怎么做?

I would like to disable it, is there a possibility to do such a thing, and if yes how ?

谢谢

推荐答案

可以通过继承 UIBarButtonItem 来完成.在 UIBarButtonItem 上将菜单设置为 nil 不起作用,但您可以覆盖菜单属性并防止首先对其进行设置.

It can be done by subclassing UIBarButtonItem. Setting the menu to nil on a UIBarButtonItem doesn't work, but you can override the menu property and prevent setting it in the first place.

class BackBarButtonItem: UIBarButtonItem {
  @available(iOS 14.0, *)
  override var menu: UIMenu? {
    set {
      /* Don't set the menu here */
      /* super.menu = menu */
    }
    get {
      return super.menu
    }
  }
}

然后您可以按照自己喜欢的方式在视图控制器中配置后退按钮,但使用 BackBarButtonItem 而不是 UIBarButtonItem:

Then you can configure the back button in your view controller the way you like, but using BackBarButtonItem instead of UIBarButtonItem:

let backButton = BackBarButtonItem(title: "BACK", style: .plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton

这是首选方式,因为您只在视图控制器的导航项中设置了一次 backBarButtonItem,然后无论将要推送的视图控制器,推送的控制器都会在导航栏上自动显示后退按钮.如果使用 leftBarButtonItem 而不是 backBarButtonItem,则必须在要推送的每个视图控制器上设置它.

This is the preferred way because you set the backBarButtonItem only once in your view controller's navigation item, and then whatever view controller it will be pushing, the pushed controller will show the back button automatically on the nav bar. If using leftBarButtonItem instead of backBarButtonItem, you will have to set it on every view controller that will be pushed.

这篇关于禁用长按返回按钮(标注菜单)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆