Как я могу использовать предложенные действия, данные из UIContextMenuConfiguration? - PullRequest
0 голосов
/ 18 октября 2019

Кроме видео * WWDC - 44: 18 пример проекта В Интернете не так много информации.

Таким образом, actionProvider при вызове имеет список suggestedActions, который передается ему системой.

Это может быть комбинация UIMenu си UIAction s, так что потенциально это полностью построенная иерархия, взятая из системы. Это могут быть вещи, которые вы определили в своей цепочке респондентов с помощью нового API-интерфейса интерфейса пользователя, представленного в iOS 13, или вещи, предлагаемые другими компонентами системы. Итак, мы делаем полностью настраиваемое меню, поэтому отложим suggestedActions. Во-первых, мы создадим наше меню редактирования.

Но до сих пор я узнал, что данный Идентификатор может иметь предопределенные предполагаемые действия. suggestionActions не являютсясвязан с любым идентификатором. Если я изменю этот идентификатор, suggestedActions не изменится. Кажется, это основано на его контексте, который, как я полагаю, находится в контексте ячеек таблицы ...

Я пытаюсь увидеть, как это выглядит, но ничего не появляется. Если я нажму на ячейку, ничего не появится.

class ViewController: UIViewController {
    let tableview: UITableView = {
        let tv = UITableView()
        tv.frame = UIScreen.main.bounds

        return tv
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(tableview)
        tableview.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        tableview.delegate = self
        tableview.dataSource = self
    }
}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        if cell.detailTextLabel == nil {
            cell = UITableViewCell(style: .value1, reuseIdentifier: "cell")
        }
        cell.textLabel?.text = "Honey"
        cell.detailTextLabel?.text = "iOS developer"

        return cell
    }

    @available(iOS 13.0, *)
    func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {

        return UIContextMenuConfiguration(identifier: nil, previewProvider: nil, actionProvider: { suggestedActions in
            print("suggestedActions", suggestedActions)
            let menu = UIMenu(title: "", children: suggestedActions)

            return menu
        })
    }
}

Я также напечатал suggestedActions, что я получил:

  - 0 : <UIMenu: 0x6000008e6790; title = Standard Edit; identifier = com.apple.menu.standard-edit; options = (Inline); children = <NSArray: 0x600001318900>>
  - 1 : <UIMenu: 0x6000008e6820; title = Replace; identifier = com.apple.menu.replace; options = (Inline); children = <NSArray: 0x6000008e64c0>>
  - 2 : <UIMenu: 0x6000008e7330; title = Text Style; identifier = com.apple.menu.text-style; image = <UIImage:0x60000349c870 symbol(system: bold.italic.underline) {36, 17} baseline=3.66667,contentInsets={1, 2, 1, 2},alignmentRectInsets={-2.9999999999999982, 0, -0.33333333333333348, 0} config=<(null), traits=(UserInterfaceIdiom = Phone, DisplayScale = 3, DisplayGamut = P3, HorizontalSizeClass = Compact, VerticalSizeClass = Regular, UserInterfaceStyle = Light, UserInterfaceLayoutDirection = LTR, PreferredContentSizeCategory = L)>>; children = <NSArray: 0x6000008e6df0>>
  - 3 : <UIMenu: 0x6000008e6d00; title = Lookup; identifier = com.apple.menu.lookup; options = (Inline); children = <NSArray: 0x60000049c870>>
  - 4 : <UIMenu: 0x6000008e7060; title = Learn; identifier = com.apple.menu.learn; options = (Inline); children = <NSArray: 0x60000049c220>>
  - 5 : <UIMenu: 0x6000008e6d90; title = Speech; identifier = com.apple.command.speech; options = (Inline); children = <NSArray: 0x6000008e6490>>
  - 6 : <UIMenu: 0x6000008e7180; title = Share; identifier = com.apple.menu.share; options = (Inline); children = <NSArray: 0x60000049c6a0>>
  - 7 : <UIMenu: 0x6000008e6a30; title = Writing Direction; identifier = com.apple.menu.writing-direction; options = (Inline); children = <NSArray: 0x6000006fe1c0>>
...