Строка меню UIMenuBuilder и контекстное меню
В документации говорится: «Чтобы добавлять и удалять меню из строки меню с помощью системы главного меню, переопределите buildMenu(with:) в делегате вашего приложения. Чтобы создать контекстное меню с использованием контекстной системы, переопределите метод в контроллере представления».
Однако я не наблюдаю такого поведения. Весь мой код меню для создания меню находится в делегате приложения. У меня есть несколько случаев, когда я использую, и только один случай, когда я создаю меню с нуля:
let zoomInCommand = UIKeyCommand(title: NSLocalizedString("Zoom In", comment: ""),
image: nil,
action: #selector(ViewController.zoomIn),
input: "+",
modifierFlags: .command)
let zoomOutCommand = UIKeyCommand(title: NSLocalizedString("Zoom Out", comment: ""),
image: nil,
action: #selector(ViewController.zoomOut),
input: "-",
modifierFlags: .command)
let zoomCancelCommand = UIKeyCommand(title: NSLocalizedString("Reset Zoom", comment: ""),
image: nil,
action: #selector(ViewController.zoomCancel),
input: "0",
modifierFlags: .command)
let zoomMenu = UIMenu(title:"Zoom", identifier: UIMenu.Identifier("Zoom"), options:.displayInline ,children: [zoomInCommand,zoomOutCommand,zoomCancelCommand])
builder.insertChild(zoomMenu, atEndOfMenu: .view)
Примечание. Это ZoomMenu также встроено в делегат приложения, как и другие элементы. Вот примерinsertSibling()
функция, о которой я упоминал.
let saveProjectCommand = UIKeyCommand(title: NSLocalizedString("Save Project", comment: ""),
image: nil,
action: #selector(ViewController.saveProjectAndShowActivityIndicator),
input: "p",
modifierFlags: .command)
let saveImageCommand = UIKeyCommand(title: NSLocalizedString("Save Image", comment: ""),
image: nil,
action: #selector(ViewController.saveImageAction),
input: "i",
modifierFlags: .command)
let saveSVGCommand = UIKeyCommand(title: NSLocalizedString("Save SVG File", comment: ""),
image: nil,
action: #selector(ViewController.saveSVG),
input: "g",
modifierFlags: .command)
let saveMenu = UIMenu(title:"Save",identifier: UIMenu.Identifier(rawValue: "Save"),children: [saveProjectCommand,saveSVGCommand,saveImageCommand])
builder.insertSibling(saveMenu, beforeMenu: .close)
В моем контроллере представления я используюvalidate
функция. Единственные элементы, которые там отображаются, — это три функции масштабирования. Кроме того, если при запуске приложения я долго нажимаю кнопку «КОМАНДА», я получаю то, что выглядит как контекстное меню с функциями масштабирования. Учитывая документацию, поскольку я определил эту функцию масштабирования в делегате приложения, она не должна появляться здесь, в контроллере представления, но она есть. Кроме того, если появляется меню масштабирования, почему не появляется меню сохранения?