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

如何以编程方式点击iOS下拉按钮的第二个UIMenu菜单项?

实现选中状态同步+编程触发菜单项方案

一、先搞定选中标记与按钮标题同步

你的原始代码未处理选中状态,需要给UIAction添加标识和选中状态,配置菜单支持单选(系统会自动显示勾选标记),同时在选中时更新按钮标题:

// 实例变量存储当前选中的菜单项
private var currentSelectedAction: UIAction?

// 构建带状态的菜单列表
private func buildMenuList() -> [UIAction] {
    return [
        UIAction(title: "title1", identifier: .init("action_1"), state: .selected) { [weak self] action in
            self?.updateSelectedAction(action)
        },
        UIAction(title: "title2", identifier: .init("action_2"), state: .off) { [weak self] action in
            self?.updateSelectedAction(action)
        },
        UIAction(title: "title3", identifier: .init("action_3"), state: .off) { [weak self] action in
            self?.updateSelectedAction(action)
        }
    ]
}

// 统一处理选中逻辑
private func updateSelectedAction(_ action: UIAction) {
    // 取消之前选中项的状态
    currentSelectedAction?.state = .off
    // 标记当前项为选中
    action.state = .selected
    currentSelectedAction = action
    
    // 更新按钮标题为选中项的文字
    btn.setTitle(action.title, for: .normal)
    
    // 刷新菜单,确保勾选标记同步生效
    btn.menu = UIMenu(children: buildMenuList(), options: .singleSelection)
}

// 初始化按钮和菜单
private func setupDropdownButton() {
    let initialMenu = buildMenuList()
    currentSelectedAction = initialMenu.first
    btn.setTitle(currentSelectedAction?.title, for: .normal)
    btn.menu = UIMenu(children: initialMenu, options: .singleSelection)
    btn.showsMenuAsPrimaryAction = true // 点击直接弹出菜单,无需长按(可选配置)
}

在viewDidLoad中调用setupDropdownButton()即可完成初始化。

二、编程方式触发第二个菜单项

要模拟用户点击第二个选项,直接定位对应UIAction并执行选中逻辑即可:

private func triggerSecondMenuItem() {
    // 通过标识定位第二个菜单项(比依赖数组索引更可靠,避免顺序变动出错)
    guard let secondAction = buildMenuList().first(where: { $0.identifier == .init("action_2") }) else {
        return
    }
    // 执行选中逻辑,等同于用户手动点击该选项
    updateSelectedAction(secondAction)
}

核心要点

  • 使用UIAction.identifier定位菜单项,避免数组顺序变动导致的错误
  • UIMenu(options: .singleSelection)会自动管理菜单项的勾选标记,无需手动绘制
  • showsMenuAsPrimaryAction设为true可让按钮点击直接弹出菜单,按需选择开启

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:55:00