Как я могу использовать предлагаемые действия, данные из UIContextMenuConfiguration?

Другие, чем в видео WWDC - 44:18 образец проекта там не так много информации в Интернете.

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

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

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

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

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

0 ответов

Другие вопросы по тегам