web-dev-qa-db-ja.com

UIContextMenuConfigurationのiOS 13.0 UIMenuおよびUIAction

IOS 13.0 Betaで導入された新しいAPIを使用しようとしています。これらのAPIにアクセスできるように、Xcode 11.0 Beta 3をダウンロードしました。

オンラインで見つけたコードの一部は次のようなことをします:

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
    }
}

これは問題ないようですが、Xcodeでコンパイルすることもできません。私が得るエラーは:

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

構成定数の作成について。

Type of expression is ambiguous without more context

保存アクションの作成時。

および他の同様のエラーをカップルします。

また、この形式のコンストラクタはありません。

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

Xcode-11ベータ3.0でこれらが欠落しているのはなぜですか?

どんな助けと洞察もいただければ幸いです。

5
C0D3

Xcode 11.0 Beta 5では、次のように記述できます。

_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<UIAction>_の代わりにUIMenu
  • 包括的なSwift初期化子を使用すると、imageattributesidentifierなどの適切なデフォルト値を持つオプションのパラメーターを削除できます。
  • UIMenu<UIAction>.create(...)またはUIAction(__title:...)は不要です。それらはすべて本当のイニシャライザです。
1
Glen Low