1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UIMenuを使ってメニュー画面を表示

Posted at

#今回の内容

  • UIMenu()でボタンを押したときに、メニューを表示出来る様にする。

#コードと簡単解説

##.displayInline
D7A6C8FD-2533-4A6B-89A0-1D31CDB9E3B0_1_201_a.jpeg

  • displayInlineMenuButton.menuUIMenu()を設定することで、UIMenu(children: [UIMenuElement])に設定しているUIMenu()を表示する値として追加します。

  • UIMenu(options: .displayInline)は表示するUIAction()UIButton()を押した時に全て表示します。

  • UIMenu()を表示するには.showsMenuAsPrimaryActiontrueで設定します。

    override func viewDidLoad() {
        super.viewDidLoad()

        let displayInlineMenuButton = {() -> UIButton in
            
            let button = UIButton(frame: CGRect(x: view.frame.maxX / 4, y: view.frame.maxY / 10, width: view.frame.width / 2, height: view.frame.height / 20))
            button.setTitle("displayInlineMenu", for: .normal)
            button.titleLabel?.textColor = .black
            button.backgroundColor = .systemGreen
            button.showsMenuAsPrimaryAction = true
            return button
        }()
        view.addSubview(displayInlineMenuButton)
        
        displayInlineMenuButton.menu = UIMenu(title:"displayInlineMenu",children: [
            
            UIMenu(title: "", options: .displayInline, children: [
                
                UIAction(title:"displayInlineMenu01",handler: { _ in
                    print("displayInlineMenu01が押されました")
                }),
                UIAction(title:"displayInlineMenu02",handler: { _ in
                    print("displayInlineMenu02が押されました")
                }),
                UIAction(title:"displayInlineMenu03",handler: { _ in
                    print("displayInlineMenu03が押されました")
                }),
                UIAction(title:"displayInlineMenu04",handler: { _ in
                    print("displayInlineMenu04が押されました")
                }),
                UIAction(title:"displayInlineMenu05",handler: { _ in
                    print("displayInlineMenu05が押されました")
                })
            ])
        ])
    }

##.destructive
A2135AEC-AD01-48C4-9DAF-6071ED666983_1_201_a.jpeg 0EE4A92E-6FAC-4CBF-97C8-030D97D71898_1_201_a.jpeg

  • destructiveMenuButton.menuUIMenu()を設定することで、UIMenu(children: [UIMenuElement])に設定しているUIMenu()を表示する値として追加します。

  • UIMenu(title: "destructiveMenu", options: .destructive)UIMenu()を設定した時、UIAction()を全て表示する為のメニューが追加されます。追加されたメニューを押すと全てのUIAction()が表示されます。

  • UIMenu()を表示するには.showsMenuAsPrimaryActiontrueで設定します。

    override func viewDidLoad() {
        super.viewDidLoad()

        let destructiveMenuButton = {() -> UIButton in
            
            let button = UIButton(frame: CGRect(x: view.frame.maxX / 4, y: view.frame.maxY / 5, width: view.frame.width / 2, height: view.frame.height / 20))
            button.setTitle("destructiveMenu", for: .normal)
            button.titleLabel?.textColor = .black
            button.backgroundColor = .systemBlue
            button.showsMenuAsPrimaryAction = true
            return button
        }()
        view.addSubview(destructiveMenuButton)
        
        destructiveMenuButton.menu = UIMenu(title:"destructiveMenu",children: [
            
            UIMenu(title: "destructiveMenu", options: .destructive, children: [
                
                UIAction(title:"destructiveMenu01",handler: { _ in
                    print("destructiveMenu01が押されました")
                }),
                UIAction(title:"destructiveMenu02",handler: { _ in
                    print("destructiveMenu02が押されました")
                }),
                UIAction(title:"destructiveMenu03",handler: { _ in
                    print("destructiveMenu03が押されました")
                }),
                UIAction(title:"destructiveMenu04",handler: { _ in
                    print("destructiveMenu04が押されました")
                }),
                UIAction(title:"destructiveMenu05",handler: { _ in
                    print("destructiveMenu05が押されました")
                })
            ])
        ])
    }

##.displayInlineと.destructiveを同時に表示
73A4B232-A046-4BFE-A411-DF0256DAB429_1_201_a.jpeg

    override func viewDidLoad() {
        super.viewDidLoad()

        let displayInlineAnddestructiveMenuButton = {() -> UIButton in
            
            let button = UIButton(frame: CGRect(x: view.frame.maxX / 4, y: view.frame.maxY / 3.3, width: view.frame.width / 2, height: view.frame.height / 20))
            button.setTitle("displayInlineAnddestructiveMenu", for: .normal)
            button.titleLabel?.adjustsFontSizeToFitWidth = true
            button.titleLabel?.textColor = .black
            button.backgroundColor = .systemRed
            button.showsMenuAsPrimaryAction = true
            return button
        }()
        view.addSubview(displayInlineAnddestructiveMenuButton)
        
        displayInlineAnddestructiveMenuButton.menu = UIMenu(title:"displayInlineMenu",children: [
            
            UIMenu(title: "", options: .displayInline, children: [
                
                UIAction(title:"displayInlineMenu01",handler: { _ in
                    print("displayInlineMenu01が押されました")
                }),
                UIAction(title:"displayInlineMenu02",handler: { _ in
                    print("displayInlineMenu02が押されました")
                }),
                UIAction(title:"displayInlineMenu03",handler: { _ in
                    print("displayInlineMenu03が押されました")
                }),
                UIAction(title:"displayInlineMenu04",handler: { _ in
                    print("displayInlineMenu04が押されました")
                }),
                UIAction(title:"displayInlineMenu05",handler: { _ in
                    print("displayInlineMenu05が押されました")
                })
            ]),
            UIMenu(title: "destructiveMenu", options: .destructive, children: [
                
                UIAction(title:"destructiveMenu01",handler: { _ in
                    print("destructiveMenu01が押されました")
                }),
                UIAction(title:"destructiveMenu02",handler: { _ in
                    print("destructiveMenu02が押されました")
                }),
                UIAction(title:"destructiveMenu03",handler: { _ in
                    print("destructiveMenu03が押されました")
                }),
                UIAction(title:"destructiveMenu04",handler: { _ in
                    print("destructiveMenu04が押されました")
                }),
                UIAction(title:"destructiveMenu05",handler: { _ in
                    print("destructiveMenu05が押されました")
                })
            ])
            
        ])
    }

終わり

ご指摘、ご質問などありましたら、コメントまでお願い致します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?