SwiftUI中如何按住Option键切换显示两个菜单项?
SwiftUI实现Finder式Option键切换菜单项
要实现按住Option键时交替显示菜单项的效果,你不能直接同时放置两个按钮,得根据Option键的按压状态动态渲染对应的选项。
具体实现步骤如下:
- 利用SwiftUI的环境变量
isOptionKeyPressed监听Option键是否被按住 - 通过
if-else条件判断,根据按键状态切换显示对应的按钮
完整代码示例:
import SwiftUI struct ContentView: View { // 监听Option键的按压状态 @Environment(\.isOptionKeyPressed) private var isOptionPressed var body: some View { Menu("操作") { if isOptionPressed { Button("Alternative option") { // 这里写备选操作的逻辑 } .keyboardShortcut(KeyEquivalent("i"), modifiers: [.command, .option]) } else { Button("Regular option") { // 这里写常规操作的逻辑 } .keyboardShortcut(KeyEquivalent("i"), modifiers: [.command]) } } } }
设置完成后,按住Option键打开菜单时会显示"Alternative option",松开Option键则显示"Regular option",完全匹配Finder文件菜单的交互逻辑。
注意:
isOptionKeyPressed环境变量仅支持macOS 12及以上版本,若需兼容更低版本,可通过监听NSEvent的按键事件来实现类似逻辑。
内容的提问来源于stack exchange,提问作者Peter Lapisu
相关产品推荐
相关产品推荐

