You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于布尔值切换UIMenu Action的显示/隐藏标题?

基于布尔值切换UIMenu选项标题的实现方案

可以通过两种方式实现需求,以下是具体步骤:

方案一:动态重建UIMenu(简单直接)

UIMenu和UIAction默认是不可变对象,因此可以在状态变化时,根据布尔值重新生成菜单:

  1. 定义全局状态变量(你已完成这一步):
var isContentHidden = true // 初始状态:内容隐藏,对应标题"show"
  1. 封装菜单创建方法,根据当前状态决定按钮标题:
func generateToggleMenu() -> UIMenu {
    let actionTitle = isContentHidden ? "show" : "hide"
    let toggleAction = UIAction(title: actionTitle, handler: menuHandler)
    return UIMenu(title: "menu", children: [toggleAction])
}
  1. 状态变化时更新菜单(比如给按钮绑定菜单时):
// 假设触发菜单的是一个UIButton
yourTriggerButton.menu = generateToggleMenu()
yourTriggerButton.showsMenuAsPrimaryAction = true

方案二:直接修改UIAction标题(高效,无需重建菜单)

iOS 14及以上支持直接修改UIAction的属性,无需重建整个菜单:

  1. 将UIAction定义为全局变量,方便后续修改:
var toggleAction: UIAction!
var isContentHidden = true
  1. 在视图初始化时创建菜单:
override func viewDidLoad() {
    super.viewDidLoad()
    let initialTitle = isContentHidden ? "show" : "hide"
    toggleAction = UIAction(title: initialTitle, handler: menuHandler)
    let menu = UIMenu(title: "menu", children: [toggleAction])
    
    // 绑定到按钮
    yourTriggerButton.menu = menu
    yourTriggerButton.showsMenuAsPrimaryAction = true
}
  1. 在菜单点击逻辑中同步更新状态和标题:
func menuHandler(action: UIAction) {
    // 切换状态
    isContentHidden.toggle()
    // 更新按钮标题
    toggleAction.title = isContentHidden ? "show" : "hide"
    // 同步处理内容的显示/隐藏
    yourContentContainer.isHidden = isContentHidden
}

注意事项

  • 方案二要求部署目标为iOS 14及以上,若需兼容更低版本,建议使用方案一。
  • 无论哪种方案,都要确保状态变量isContentHidden与内容的实际显示状态保持同步。

内容的提问来源于stack exchange,提问作者Mie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:45:21