web-dev-qa-db-fra.com

iOS 13.0 UIMenu et UIAction pour UIContextMenuConfiguration

J'essaie d'utiliser les nouvelles API introduites dans iOS 13.0 Beta. J'ai téléchargé Xcode 11.0 Beta 3 pour pouvoir accéder à ces API.

Une partie du code que j'ai trouvé en ligne fait des choses comme:

extension SingleViewController: UIContextMenuInteractionDelegate {
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
        let configuration = UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { actions -> UIMenu<UIAction>? in
            // Creating Save button
            let save = UIAction(__title: "Save", image: UIImage(systemName: "tray.and.arrow.down.fill"), options: []) { action in
                // Just showing some alert
                self.showAlert(title: action.title)
            }

            // Creating Rotate button
            let rotate = UIAction(__title: "Rotate", image: UIImage(systemName: "arrow.counterclockwise"), options: []) { action in
                self.showAlert(title: action.title)
            }
            // Creating Delete button
            let delete = UIAction(__title: "Delete", image: UIImage(systemName: "trash.fill"), options: .destructive) { action in
                self.showAlert(title: action.title)
            }
            // Creating Edit, which will open Submenu
            let edit = UIMenu<UIAction>.create(title: "Edit...", children: [rotate, delete])

            // Creating main context menu
            return UIMenu<UIAction>.create(title: "Menu", children: [save, edit])
        }
        return configuration
    }
}

Cela semble bien mais ne compile même pas dans mon Xcode. Les erreurs que j'obtiens sont:

Cannot specialize non-generic type 'UIMenu' Replace '<UIAction>' with ''

sur la création de constante de configuration.

Type of expression is ambiguous without more context

sur la création d'une action de sauvegarde.

et coupler d'autres erreurs similaires.

Je dois également mentionner que je n'ai même pas les constructeurs qui sont dans ce format:

UIAction (__ title: "String", image: UIImage, options: Array) UIMenu.create (...)

Pourquoi ces éléments manquent-ils dans Xcode-11 beta 3.0?

Toute aide et information serait appréciée.

5
C0D3

Dans Xcode 11.0 Beta 5, vous pouvez maintenant écrire:

extension SingleViewController: UIContextMenuInteractionDelegate {
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
        let configuration = UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { actions -> UIMenu? in
            // Creating Save button
            let save = UIAction(title: "Save", image: UIImage(systemName: "tray.and.arrow.down.fill")) { action in
                // Just showing some alert
                self.showAlert(title: action.title)
            }

            // Creating Rotate button
            let rotate = UIAction(title: "Rotate", image: UIImage(systemName: "arrow.counterclockwise")) { action in
                self.showAlert(title: action.title)
            }
            // Creating Delete button
            let delete = UIAction(title: "Delete", image: UIImage(systemName: "trash.fill"), attributes: .destructive) { action in
                self.showAlert(title: action.title)
            }
            // Creating Edit, which will open Submenu
            let edit = UIMenu(title: "Edit...", children: [rotate, delete])

            // Creating main context menu
            return UIMenu(title: "Menu", children: [save, edit])
        }
        return configuration
    }
}
  • Les classes ne sont plus génériques, par exemple UIMenu au lieu de UIMenu<UIAction>.
  • Swift vous permettent de supprimer les paramètres facultatifs, qui ont des valeurs par défaut raisonnables, par exemple image, attributes et identifier.
  • Plus de UIMenu<UIAction>.create(...) ou UIAction(__title:...). Ce sont tous de vrais initialiseurs maintenant, yay!
1
Glen Low