Показывать UIMenu при однократном нажатии на UIBarButtonItem - PullRequest
0 голосов
/ 07 августа 2020

в iOS 14, есть новые API для UIMenu, и теперь его можно прикрепить к UIBarButtonItem, вот так: IMAGE

This это мой код:

@IBOutlet weak var addButton: UIBarButtonItem! // The button is from the storyboard.

override func viewDidAppear(_ animated: Bool) {
    if #available(iOS 14.0, *) {
        let simpleAction : UIAction = .init(title: "Simple", image: nil, identifier: nil, discoverabilityTitle: nil, attributes: .init(), state: .mixed, handler: { (action) in
            self.addButtonActionPressed(action: .simple)
        })
        
        let advancedAction : UIAction = .init(title: "Advanced", image: nil, identifier: nil, discoverabilityTitle: nil, attributes: .init(), state: .mixed, handler: { (action) in
            self.addButtonActionPressed(action: .advanced)
        })
        
        let actions = [simpleAction, advancedAction]
        
        let menu = UIMenu(title: "", image: nil, identifier: nil, options: .displayInline, children: actions)
        
        addButton.primaryAction = nil
        addButton.menu = menu
    }
}

Но проблема в том, что когда я нажимаю кнопку, ничего не происходит. Только когда я долго нажимаю кнопку, отображается меню. Я видел этот код на inte rnet:

button.showsMenuAsPrimaryAction = true

Но мне это не поможет, потому что Value of type 'UIBarButtonItem' has no member 'showsMenuAsPrimaryAction'

Есть идеи, как исправить? Я использую Xcode 12.0 beta 4 (12A8179i). Спасибо

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

Я исправил эту проблему. Если это происходит с кем-либо из вас, вы можете сделать следующее:

  • Попробуйте проверить, есть ли другое действие с кнопкой. Если есть, меню не будет отображаться как основное действие.

  • Если вы используете раскадровку, используйте вместо этого код, например:

    self.navigationItem .rightBarButtonItem = .init (systemItem: .add) // Затем настройте меню элемента здесь, выполнив: navigationItem.rightBarButtonItem! .menu = menu // Замените 'menu' на свой объект меню.

Если вам известны другие советы, вы можете редактировать этот вопрос и добавлять их.

0 голосов
/ 07 августа 2020

Если вы просто устанавливаете UIBarButtonItem menu, а это все вы делаете, то кнопка показывает меню при нажатии.

Причина то, что с вами не происходит, неизвестно - потому что вы это скрываете. Вы делаете больше, но не говорите нам, что это такое. Возможно, вы подключили элемент кнопки панели к обработчику действия. Возможно, вы устанавливаете его primaryAction. Но вы делаете что-то , из-за чего меню отображается только при длительном нажатии.

...