Как отобразить следующий набор параметров в UIMenuController - PullRequest
0 голосов
/ 29 октября 2018

Если вы выделите слово на iOS, Apple представит опцию «Заменить ...» в UIMenuController. Нажав на него, контроллер меню изменяет свой набор параметров на слова замены:

enter image description here

Как мне добиться такого же поведения обновления элементов после выбора опции?


Я пытался вызвать UIMenuController. update(), но после выбора первой опции меню исчезает. Я должен нажать еще раз, чтобы показать меню.

enter image description here

Я уже знаю, как настроить пункты меню и добавить свои собственные.

Я не могу понять, как заставить меню отображаться после выбора опции. Я пытался сделать следующее:

class MyTextView: UITextView {

  /// called once on viewDidLoad
  func initializeMenuItems() {
    UIMenuController.shared.menuItems = [
      UIMenuItem(title: "Thesaurus...", action: #selector(thesaurusTapped)),
    ]
  }

  @objc
  private func thesaurusTapped(_ sender: UIMenuController) {
    UIMenuController.shared.menuItems = [
      UIMenuItem(title: "Experiment", action: #selector(replacementTapped)),
      UIMenuItem(title: "Trial", action: #selector(replacementTapped)),
      UIMenuItem(title: "Inspection", action: #selector(replacementTapped)),
    ]

    UIMenuController.shared.update()
  }

  @objc
  private func replacementTapped(_ sender: UIMenuController) {
    // TODO: Display the option the user chose
  }

  override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return action == #selector(replacementTapped) || action == #selector(thesaurusTapped)
  }
}

1 Ответ

0 голосов
/ 29 октября 2018

Вместо того, чтобы звонить update, звоните setMenuVisible(:,animated):

UIMenuController.shared.setMenuVisible(true, animated: true)

Это даст эффект, который вы ищете:

enter image description here

...