---
title: UIMenuBuilder
framework: uikit
role: symbol
role_heading: Protocol
path: uikit/uimenubuilder
---

# UIMenuBuilder

An interface for adding and removing menus from a menu system.

## Declaration

```swift
@MainActor protocol UIMenuBuilder
```

## Mentioned in

Optimizing your iPad app for Mac

## Overview

Overview You don’t create a menu builder object. Instead, you override buildMenu(with:) in your app delegate or view controller to receive a builder object. Where you override this method determines the system that the builder updates. To add and remove menus from the menu bar using the main menu system, override buildMenu(with:) in your app delegate. To build a context menu using the context system, override the method in your view controller. To see an example of how to use a menu builder object, see Adding menus and shortcuts to the menu bar and user interface.

## Topics

### Getting menu systems and elements

- [system](uikit/uimenubuilder/system.md)
- [menu(for:)](uikit/uimenubuilder/menu(for:).md)
- [action(for:)](uikit/uimenubuilder/action(for:).md)
- [command(for:propertyList:)](uikit/uimenubuilder/command(for:propertylist:).md)

### Inserting child menus

- [insertChild(_:atStartOfMenu:)](uikit/uimenubuilder/insertchild(_:atstartofmenu:).md)
- [insertChild(_:atEndOfMenu:)](uikit/uimenubuilder/insertchild(_:atendofmenu:).md)

### Inserting sibling menus

- [insertSibling(_:beforeMenu:)](uikit/uimenubuilder/insertsibling(_:beforemenu:).md)
- [insertSibling(_:afterMenu:)](uikit/uimenubuilder/insertsibling(_:aftermenu:).md)

### Replacing menus and child menu elements

- [replaceChildren(ofMenu:from:)](uikit/uimenubuilder/replacechildren(ofmenu:from:).md)

### Removing a menu

- [remove(menu:)](uikit/uimenubuilder/remove(menu:).md)

### Instance Methods

- [insertElements(_:afterAction:)](uikit/uimenubuilder/insertelements(_:afteraction:).md)
- [insertElements(_:afterCommand:propertyList:)](uikit/uimenubuilder/insertelements(_:aftercommand:propertylist:).md)
- [insertElements(_:afterMenu:)](uikit/uimenubuilder/insertelements(_:aftermenu:).md)
- [insertElements(_:atEndOfMenu:)](uikit/uimenubuilder/insertelements(_:atendofmenu:).md)
- [insertElements(_:atStartOfMenu:)](uikit/uimenubuilder/insertelements(_:atstartofmenu:).md)
- [insertElements(_:beforeAction:)](uikit/uimenubuilder/insertelements(_:beforeaction:).md)
- [insertElements(_:beforeCommand:propertyList:)](uikit/uimenubuilder/insertelements(_:beforecommand:propertylist:).md)
- [insertElements(_:beforeMenu:)](uikit/uimenubuilder/insertelements(_:beforemenu:).md)
- [remove(action:)](uikit/uimenubuilder/remove(action:).md)
- [remove(command:propertyList:)](uikit/uimenubuilder/remove(command:propertylist:).md)
- [replace(action:with:)](uikit/uimenubuilder/replace(action:with:).md)
- [replace(command:propertyList:with:)](uikit/uimenubuilder/replace(command:propertylist:with:).md)
- [replace(menu:with:)](uikit/uimenubuilder/replace(menu:with:)-8mwou.md)
- [replace(menu:with:)](uikit/uimenubuilder/replace(menu:with:)-95tg2.md)

## See Also

### App menus

- [UIMenu](uikit/uimenu.md)
- [UIMenuSystem](uikit/uimenusystem.md)
- [UIMainMenuSystem](uikit/uimainmenusystem.md)
