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.
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
}
}
UIMenu
au lieu de UIMenu<UIAction>
.image
, attributes
et identifier
.UIMenu<UIAction>.create(...)
ou UIAction(__title:...)
. Ce sont tous de vrais initialiseurs maintenant, yay!