1
votes

Raccourcis clavier dans SwiftUI

Je crée une application SwiftUI et je souhaite ajouter des raccourcis clavier à l'aide d'une barre de menus. J'ai déjà vu la vidéo d'Apple SwiftUI sur tous les appareils , mais je n'ai pas pu Je ne comprends pas comment ils ont intégré le menu.xib dans leur application.

#if targetEnvironment(macCatalyst)
// MacOS
#else
// iOS
#endif

ne fonctionne pas non plus. J'ai essayé d'ajouter une barre de menus à mon projet, mais je n'ai pas pu compiler. Avez-vous une idée sur la façon d'en ajouter un?


1 commentaires

Veuillez partager le code en question.


3 Réponses :


0
votes

mais je n'ai pas compris comment ils ont intégré le menu.xib dans leur application.

Je pense (je n'ai pas vu la vidéo) qu'ils ont implémenté SwiftUI de manière native sur le mac, ce qui signifie qu'ils n'ont pas utilisé Catalyst.

J'ai également rencontré exactement le même problème, et je l'ai "résolu" en ajoutant un élément de menu dans AppDelegate qui envoie ensuite une notification à la vue intéressée par l'action. Ce n'est pas idéal, mais cela fonctionne.

J'ai implémenté une action de lecture en utilisant la barre d'espace, cela ressemble partiellement à ceci:
UIKeyCommand (entrée: "", modifierFlags: [], action: #selector (togglePlay))

Consultez la documentation de UIMenuBuilder pour plus d'informations.


0 commentaires

0
votes

Vous pouvez remplacer la fonction buildMenu dans votre AppDelegate et manipuler votre barre de menus à partir de là. Cela fonctionnera sans avoir besoin d'une vérification de l'environnement Catalyst.

func newTask() -> UIMenu {

        let command                  = UIKeyCommand(input: "n", modifierFlags: [.command], action: #selector(onNewTask))
        command.title                = "Menu_Title_New_Task".localized()
        command.discoverabilityTitle = command.title

        return UIMenu(title: command.title, image: nil, identifier: "your_identifier_here", options: .displayInline, children: [command])
    }

Exemple de clé d'entrée:

override func buildMenu(with builder: UIMenuBuilder) {
    super.buildMenu(with: builder)

    builder.remove(menu: .services)
    builder.remove(menu: .format)
    builder.remove(menu: .toolbar)

    builder.insertChild(newTask(), atStartOfMenu: .file)
    builder.insertSibling(logout(), afterMenu: .about)
    builder.insertSibling(preferences(), afterMenu: .about)     
}


0 commentaires

1
votes

Dans SwiftUI 2.0 (sur BigSur Beta3), vous pouvez ajouter un Menue assez facilement comme celui-ci à une application Mac:

@main
struct AppWithMenue: App {
  var body: some Scene {
    WindowGroup {
      ContentView()      
    }
    .commands {
      MyCommands()
    }
  }
}

struct MyCommands : Commands{
  var body: some Commands {
    CommandMenu("MyCommands") {
      Section {
        Button("Command 1", action: {print ("Command 1")})
        .keyboardShortcut("1")
        Button("Command 2", action: {print ("Command 2")})
          .keyboardShortcut("2")
      }
    }
  }
}


0 commentaires