我尝试使用新的MenuBarExtra在Swift UI中创建一个简单的菜单栏。我希望弹出窗口中的按钮文本在每次菜单打开时动态更新。
我创建的MenuBarExtra如下所示。
MenuBarExtra("Example menu title") {
Button("Item 1") {
}
Button("Item 2") {
}
Button("Item 3") {
}
}
我希望每次打开菜单时都更改按钮文本(即第1项)。我希望每次打开菜单时都触发onAppear,但它只在第一次打开弹出窗口时触发。在首次打开弹出窗口后,没有明确的方法来检测菜单关闭或打开事件。
我已经尝试过使用各种事件处理回调来检测弹出窗口的打开。OnAppear用于检测视图的初始创建,而onDisappear从未被调用过。
MenuBarExtra("Example menu title") {
VStack {
Button("Item 1") {
}
Button("Item 2") {
}
Button("Item 3") {
}
}.onAppear() {
print("This only prints the very first time the menu is opened")
}
}
1条答案
按热度按时间f0ofjuux1#
根据Apple's Docs,
MenuBarExtra
符合Scene
-这意味着你可以使用ScenePhase
的Environment
变量在MenuBarExtra每次进入前台或后台时调用一些东西。https://www.hackingwithswift.com/quick-start/swiftui/how-to-detect-when-your-app-moves-to-the-background-or-foreground-with-scenephase。示例用法: