Действия на сочетания клавиш в SwiftUI

Действия на сочетания клавиш в SwiftUI

Знакомимся с модификатором `keyboardShortcut`. Добавим модификаторы для клавиш `.command`, `.option`, `.shift`


Имя Автора
Автор Никита Россик Увлекаюсь разработкой под .

Модификатор keyboardShortcut добавляет сочетания клавиш:

struct ContentView: View {
    var body: some View {
        Button("Refresh content") {
            print("⌘ + R pressed")
        }
        .keyboardShortcut("r", modifiers: [.command])
    }
}
Добавление информации о шорткате в интерфейс.

Теперь по нажатию двух клавиш Command + R выведем сообщение в консоль.

Первый параметр модификатора keyboardShortcut должен быть экземпляром структуры KeyEquivalent, он наследуется от протокола ExpressibleByExtendedGraphemeClusterLiteral и создаёт экземпляр KeyEquivalent со строковым литералом в 1 символ.

init(_ key: KeyEquivalent, modifiers: EventModifiers = .command)

А вот второй параметр modifiers наследуется от структуры EventModifiers. Это уникальный набор клавиш-модификаторов.

В примере выше используем клавишу R и модификатор .command, который устанавливается по умолчанию в SwiftUI.

Рассмотрим пример с переключателем:

struct ContentView: View {

    @State private var isEnabled = false
    
    var body: some View {
        VStack {
            Text("Press ⌘ + T")
            Toggle(isOn: $isEnabled) {
                Text(String(isEnabled))
            }
            .padding()
        }
        .keyboardShortcut("t")
    }
}

Нажимаем на ⌘ + T и меняем положение переключателя. Применяем модификатор ко всем элементам VStack.



Другой пример:

Button("Confirm action") {
    print("Launching starship…")
}
.keyboardShortcut(.defaultAction)

Проперти .defaultAction — стандартная комбинация клавиш для кнопки по умолчанию Enter.

Я положил сочетание клавиш Escape + Option + Shift в константу updateArticles:

struct ContentView: View {

    let updateArticles = KeyboardShortcut(.escape, modifiers: [.option, .shift])
    
    var body: some View {
        Button { 
            print("Sync articles…")
        } label: { 
            VStack(spacing: 30) {
                Image(systemName: "books.vertical")
                    .imageScale(.large)
                Text("Update articles")
            }
        }
        .keyboardShortcut(updateArticles)
    }
}



Другие туториалы

Как добавить кастомную SwiftUI View в библиотеку Xcode

В этой статье я покажу как добавить свою View в Xcode Library с помощью LibraryContentProvider.

SF Symbols 3 и Render Mode

Вместе c iOS 15 обновили SF Symbols до 3-ей версии. Добавили 600 новых символов и разные способы покрасить их. Некоторые символы получили вариации форм.

´UISheetPresentationController´ как в приложении Карты

В iOS 15 появились sheet-контроллеры. Их можно перетаскивать с изменением высоты. Вы встречали эти контроллеры в приложениях «Карты» и «Акции».

Отступы Edge Insets для ´UIButton´

Как добавить отступ между картинкой и заголовком в кнопке. Как поместить иконку справа от заголовка.

В telegram-канале приходят уведомления о новых туториалах. В чате для iOS разработчиков ответят на вопросы.

Открыть Telegram-канал