【问题标题】:Disable Long Press back Button (callout menu) [duplicate]禁用长按后退按钮(标注菜单)[重复]
【发布时间】:2021-01-30 19:23:04
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: ios swift navigation uinavigationbar ios14


    【解决方案1】:

    尝试在您的 VC 上将 backButtonDisplayMode 设置为 .minimal ->

    if #available(iOS 14.0, *) {
        navigationItem.backButtonDisplayMode = .minimal
    }
    

    https://developer.apple.com/documentation/uikit/uinavigationitem/3656350-backbuttondisplaymode

    【讨论】:

    • 我投了赞成票,但它实际上不起作用
    • 要详细说明@charleyatwork 的答案,如果您因为将titlebackButtonTitle 设置为空字符串以仅具有人字形图标而最终得到一个空白菜单,则可以使用此sn-p 但在 else 块中继续设置 backButtonTitle = "" 以获得两全其美。
    • 是的,这在 iOS14 中运行良好,取代了之前设置 backButtonTitle 的“hack”。
    【解决方案2】:

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

    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:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 2011-04-06
      • 2017-01-18
      • 2014-04-09
      • 2011-12-19
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多