如何在 macOS 上的 SwiftUI 中以编程方式控制菜单?

问题描述 投票:0回答:1

我正在 macOS 上的 SwiftUI 中编写一个 ComboBox,并希望以灵活的方式以编程方式控制它,而不是单击按钮和列表显示。

我可以使用

Menu
创建一个参考 Apple Developer - Menu 的简单菜单,但找不到任何方法来以编程方式控制它,比如显示或隐藏它的列表。

然后我尝试用如下所示的

List
定制一个。但是当该列表显示时,它会发生并将其他视图向下推,这不像默认系统
Menu
漂浮在以下视图前面。

VStack {
    TextField("Ttitle", text: $string) { isEditing in
        onEditing = isEditing
    }
    if onEditing { List(listItems, id:\.self) { Text($0) } }
}

如果有这样的方法再好不过了,但它不存在

SomeViewHere()
    .menu(isPresented: $showMenu) {
        Button("A") {}
        Button("B") {}
        Button("C") {}
    }

此外,我在here找到了一个帖子,但它只适用于iOS。

我不熟悉AppKit,所以我不知道那里是否存在解决方案。但我也很高兴 AppKit 可以工作并且愿意学习它。不管怎样,我总是更喜欢使用原生的 SwiftUI。那么,关于如何实现这一点有什么想法吗?

swift macos swiftui appkit
1个回答
0
投票

参考这篇文章这篇文章,我想出了如何将浮动列表带入生活。下面显示了一个自定义示例。

@State var showList: Bool = false

var body: some View {

    Button("Click Me") { showList.toggle() }
    .frame(width: 100, height: 20)
    .overlay {
        if showList {
            List {
                Button("AA") {}
                Button("AA") {}
                Button("AA") {}
            }
            .frame(width: 200, height: 300)
            .offset(y: 160)
        }
    }
    .zIndex(1)
    
    Text("Hello World")
    Circle().fill(.brown).frame(width: 50, height: 50)
}
© www.soinside.com 2019 - 2024. All rights reserved.