#swift #keyboard-shortcuts
#Swift #Сочетания клавиш
Вопрос:
Сочетания клавиш SwiftUI, похоже, вообще не работают, когда кнопка находится в меню, и они работают только в определенных местах размещения элементов панели инструментов, таких как нижняя панель.
Я собрал это демонстрационное приложение, чтобы показать текущее поведение.
К сожалению, я думаю, что это ошибка SwiftUI, но кто-нибудь может найти способ заставить их работать, особенно кнопки в меню.
Это протестировано с Xcode 12.2 и iOS 14.2.
Номер обратной связи: FB8895536
struct ContentView: View{
@State private var tabSelection = Tab.navigationBarItemTest
enum Tab {
case navigationBarItemTest
case navigationBarMenuTest
case toolbarItemTest
case ToolbarItemMenuTest
}
var body: some View{
TabView(selection: $tabSelection) {
NavigationBarItemTest()
.tabItem {
Label("Nav Bar", systemImage: "1.circle")
}
.tag(Tab.navigationBarItemTest)
NavigationBarMenuTest()
.tabItem {
Label("Nav Bar Menu", systemImage: "2.circle")
}
.tag(Tab.navigationBarMenuTest)
ToolbarItemTest()
.tabItem {
Label("Toolbar Bar", systemImage: "3.circle")
}
.tag(Tab.toolbarItemTest)
ToolbarItemMenuTest()
.tabItem {
Label("Toolbar Bar Menu", systemImage: "4.circle")
}
.tag(Tab.ToolbarItemMenuTest)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct NavigationBarItemTest: View{
@State private var show1 = false
var body: some View{
NavigationView{
Color.blue
.frame(width: 200, height: 200)
.cornerRadius(10)
.navigationBarTitle("1")
.frame(width: 200, height: 200)
.cornerRadius(10)
.sheet(isPresented: $show1, content: {
Color.blue
})
.navigationBarItems(trailing:
Button("Show"){
show1.toggle()
}.keyboardShortcut("1", modifiers: .command)
)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct NavigationBarMenuTest: View{
@State private var show2 = false
var body: some View{
NavigationView{
Color.red
.frame(width: 200, height: 200)
.cornerRadius(10)
.navigationBarTitle("2")
.frame(width: 200, height: 200)
.cornerRadius(10)
.sheet(isPresented: $show2, content: {
Color.red
})
.navigationBarItems(trailing:
Menu{
Button("Show"){
show2.toggle()
}.keyboardShortcut("2", modifiers: .command)
} label: {
Image(systemName: "plus")
}
)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct ToolbarItemTest: View{
@State private var show3 = false
var body: some View{
NavigationView{
Color.green
.frame(width: 200, height: 200)
.cornerRadius(10)
.navigationBarTitle("3")
.frame(width: 200, height: 200)
.cornerRadius(10)
.sheet(isPresented: $show3, content: {
Color.green
})
.toolbar{
ToolbarItem(placement: .navigationBarTrailing) {
Button("Show"){
show3.toggle()
}.keyboardShortcut("3", modifiers: .command)
}
}
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct ToolbarItemMenuTest: View{
@State private var show4 = false
var body: some View{
NavigationView{
Color.yellow
.frame(width: 200, height: 200)
.cornerRadius(10)
.navigationBarTitle("4")
.frame(width: 200, height: 200)
.cornerRadius(10)
.sheet(isPresented: $show4, content: {
Color.yellow
})
.toolbar{
ToolbarItem(placement: .navigationBarTrailing) {
Menu{
Button("Show"){
show4.toggle()
}.keyboardShortcut("4", modifiers: .command)
} label: {
Image(systemName: "plus")
}
}
}
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
Комментарии:
1. Я думаю, что у меня такая же проблема с моими сочетаниями клавиш, которые не работают при размещении на кнопке на панели инструментов. Удалось ли вам заставить его работать?
2. Нет. Ожидание решения этой проблемы на WWDC.
3. Ожидание решения многих проблем на WWDC lol
4. Все еще кажется проблемой в 2022 году