禁用长按返回按钮(标注菜单)
Disable Long Press back Button (callout menu)
iOS14 引入了长按后退按钮,可打开标注菜单以返回堆栈中的特定 VC。
我想禁用它,是否有可能做这样的事情,如果可以,怎么做?
谢谢
尝试在 VC ->
上将 backButtonDisplayMode
设置为 .minimal
if #available(iOS 14.0, *) {
navigationItem.backButtonDisplayMode = .minimal
}
https://developer.apple.com/documentation/uikit/uinavigationitem/3656350-backbuttondisplaymode
可以通过子类化 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,则必须在将被推送的每个视图控制器上设置它。
iOS14 引入了长按后退按钮,可打开标注菜单以返回堆栈中的特定 VC。
我想禁用它,是否有可能做这样的事情,如果可以,怎么做?
谢谢
尝试在 VC ->
上将backButtonDisplayMode
设置为 .minimal
if #available(iOS 14.0, *) {
navigationItem.backButtonDisplayMode = .minimal
}
https://developer.apple.com/documentation/uikit/uinavigationitem/3656350-backbuttondisplaymode
可以通过子类化 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,则必须在将被推送的每个视图控制器上设置它。