react-native-ios-context-menu v2.5.1
react-native-ios-context-menu
π§β οΈ Documentation WIP β οΈπ§
π Note: See TODO.md
for progress.
- The documentation is incomplete (some parts/sections are marked as TBA i.e. "to be added").
- Some of the links in the documentation are broken (i.e. the URL points to
PLACE_HOLDER_LINK
). - Some of the gifs/images are old, or broken.
- For now, please see the Usage And Examples section, and Showcase, Tests and Demos section for information on how to use this library.
Notice |
---|
π Note #1: Staring on version 2.x , this library now uses expo-modules , and contains a peer dependency to react-native-ios-utilites . |
π Note #2: The documentation + examples are currently being rewritten.π
README-old.md β The old version of the documentation (archived).π example/src/examples β The typescript rewrite of the examples (WIP). |
Versions
Library Version | Compatibility |
---|---|
2.1 + | Uses Expo-Modules Depends on react-native-ios-utilities@4.x Depends on ContextMenuAuxiliaryPreview iOS 13+Xcode 15+ |
2.0.x | Uses Expo-Modules Depends on react-native-ios-utilities@4.x iOS 13+Xcode 15+ |
1.6.2 | iOS 10 to iOS 15Xcode 12+ |
1.4 | iOS 10 to iOS 15Xcode 13+ |
1.3 and Below | iOS 10 to 14Xcode 12+ |
π Note: Supports projects targeting iOS 10 but will use the action sheet fallback when running on iOS 12 and older.
Table of Contents
TOC: Examples Index
Examples |
---|
π ContextMenuView Example 01π Summary: A basic context menu that has 3 menu action items. |
π ContextMenuView Example 02π Summary: Icon Example β A basic context menu that has 3 menu action items, each with a different "SF Symbols" icon. This examples shows how to add a system icon in the context menu action. |
π ContextMenuView Example 03π Summary: Nested Menu β This example shows a context menu that has a submenu item inside its list of menu actions. |
π ContextMenuView Example 04π Summary: Menu Attributes β This example context menu showcases the MenuActionConfig.menuAttributes property. |
π ContextMenuView Example 05π Summary: Nested Menu + Menu Attributes β A context menu that has a in-line submenu. |
π ContextMenuView Example 06π Summary: Menu Options β A context menu that has a destructive submenu. |
π ContextMenuView Example 07π Summary: Menu Options β A context menu that set to be both "destructive" and "display in-line". |
π ContextMenuView Example 08π Summary: Menu State β A context menu with 3 actions that has 'on' , 'off' , and 'mixed' menuState . |
π ContextMenuView Example 09π Summary: Events β An example for the onPressMenuItem event prop. |
π ContextMenuView Example 10π Summary: Dynamic Menu β An example showing how to dynamically update the context menu while it's visible. In this example, the menu action changes every time the counter increments every second. |
π ContextMenuView Example 11π Summary: Context Menu Previews β An example showing how to use a custom preview for the context menu. |
π ContextMenuView Example 12π Summary: Context Menu Previews β An example showing a custom context menu preview that dynamically changes its size due to its contents updating every second. |
π ContextMenuView Example 13π Summary: Menu Action β An example showing how to add a subtitle to menu action. |
π ContextMenuView Example 14π Summary: Context Menu Previews β An example that changes the exit transition of the context menu preview when its tapped using the preferredCommitStyle config. |
π ContextMenuView Example 15π Summary: Context Menu Previews β An example showing how to configure a context menu that uses targeted previews. |
π ContextMenuView Example 15-02π Summary: Context Menu Previews (Cont). β An example showing how to configure a context menu that uses targeted previews + WrapperView . |
π ContextMenuView Example 16π Summary: Icon Example β An example showing a context menu with an action that uses a 'IMAGE_ASSET' image for its icon. |
π ContextMenuView Example 17π Summary: Icon Example β An example showing a context menu with action items that have different colored icons. |
π ContextMenuView Example 18π Summary: Icon Example β An example showing a context menu with action items that has icons that uses local image assets imported via require(...) . |
π ContextMenuView Example 19π Summary: Dynamic Menu β An example showing a context menu that has a loading indicator using deferred menu elements. |
π ContextMenuView Example 20π Summary: Dynamic Menu β An example showing a state-controlled context menu that shows a loading indicator using deferred menu elements. |
π ContextMenuView Example 21π Summary: Menu Element Size β TBA |
π ContextMenuView Example 22π Summary: Menu Element Size β TBA |
π ContextMenuView Example 23π Summary: Menu Element Size β TBA |
π ContextMenuView Example 24π Summary: Menu Attributes β keepsMenuPresented |
π ContextMenuView Example 25π Summary: Icon Example β Advanced customization (E.g. scale , weight , paletteColors , hierarchicalColor ). |
π ContextMenuView Example 26π Summary: Icon Example β Network/Remote images as icons. |
π ContextMenuView Example 27π Summary: Icon Example β Network/Remote images as icons + fallback image. |
π ContextMenuView Example 28π Summary: Programmatically shows the context menu. |
π ContextMenuView Auxiliary Preview - Example 01π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 02π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 03π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 04π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 05π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 06π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 07π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 08π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 09π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 10π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 11π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 12π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 13π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 14π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 15π Summary: TBA |
π ContextMenuView Auxiliary Preview - Example 16π Summary: Programmatically shows the auxiliary preview as a popover (w/o showing the context menu). |
π ContextMenuButton Example 01π Summary: TBA |
π ContextMenuButton Example 02π Summary: TBA |
A. Introduction
A react native component to use UIMenu
on iOS 13 and later.
Gifs and Demos
π Note: These gifs are from an older version of the library running on iOS 13 (see Usage And Examples section for updated example gifs).
ContextMenuView
Examples, Left: Example 1, Example 2, and Right: Example 3, Example 4
ContextMenuView
examples, Left: Example 5, Example 6, and Right: Example 7, Example 8
ContextMenuView
example, Left: Example 9, and Right: Example 10
ContextMenuView
examples, Left: Example 11, Example 12, and Right: Example 13, Example 14
ContextMenuView
examples, Left: Example 15, Example 16, and Right: Example 17, Example 18
ContextMenuView
tests, Left: Test 1, and Right: Test 2
ContextMenuView
tests, Left: Test 3, and Right: Test 4
ContextMenuView
tests, Left: Test 5, and Right: Test 6
ContextMenuView
tests, Left/Right: Test 7
ContextMenuView
ActionSheetIOS
fallback for simple example 1 to 9
ContextMenuView
ActionSheetIOS
fallback for context menu view test 1 to 6
ContextMenuButton
examples, Left: Example 1, and Right: Example 2
Features
- Support for creating menu actions and submenus (i.e. nested and in-line menus).
- Support for customizing the menu icons (i.e. support for SF Symbols,
require(image)
, andxcasset
icons, icon tint, etc). - Extensive support for SF Symbols configuration (e.g.
pointSize
,weight
,scale
,hierarchicalColor
,paletteColors
). - Support for iOS 14 functionality (like the
UIButton
context menu, dynamically updating the menu while it's visible, etc). - Support for setting (almost) all of the native
UIMenu
and οΏΌUIAction
properties (e.g.UIMenuElementState
,MenuElementAtrributes
,discoverabilityTitle
, etc.) - Basic
ActionSheetIOS
menu fallback for iOS 12 and below. - Support for creating custom context menu previews (with support for dynamic or fixed preview sizes, setting the
UIPreviewParameters
, specifying aUITargetedPreview
, etc). - Support for custom auxiliary previews (experimental).
- Support for deferred context menu items.
B. Installation
# 1. install library + dependencies
npm install react-native-ios-utilities
npm install react-native-ios-context-menu
# 2. then run pod install (uses auto-linking)
cd ios && pod install
π Note A: You might encounter some build errors since this library is written in swift, so there's some extra step involved to use this library (see table below for reference).
π Note B: If you want to use an older or different version of this library, please refer to versions section's compatibility table.
Additional Steps |
---|
1οΈβ£ Add an empty swift file to your project |
2οΈβ£ Update the project's "Library Search Paths" build settings |
Installation (Experimental Version)
# 1. install library + dependencies
npm install react-native-ios-utilities@next
npm install react-native-ios-context-menu@next
# 2. then run pod install (uses auto-linking)
cd ios && pod install
Updating
This library has cocoapods dependency to ContextMenuAuxiliaryPreview
, so you need to update it separately.
# A. Either update this specific pod...
pod update ContextMenuAuxiliaryPreview
# B. Or update all the pods
pod update
Expo
- β You can use this library with Development Builds. No config plugin is required.
- β This library can't be used in the "Expo Go" app because it requires custom native code.
Versions and Dependencies
Library Version | Dependencies + Versions |
---|---|
2.0.x | react-native-ios-utilities - 4.x |
2.1.x | react-native-ios-utilities - 4.x ContextMenuAuxiliaryPreview - 0.1.x |
2.2.x | react-native-ios-utilities - 4.x ContextMenuAuxiliaryPreview - 0.2.x |
Troubleshooting
If you encounter any errors/bugs while using this library, or want a particular feature implemented, please create an issue! (my inbox is a mess, please feel free to tag me). β¨
Troubleshooting: Xcode Build Error (Swift)
π Note: This library is written in swift. If you are having trouble building your app after installing this library, try adding an empty swift file to your project:
- Open up your
ios/project.xcworkspace
project - On the project navigator panel (located on the right side of Xcode), right click on your project group (or another folder/group i.e the blue or yellow icons) and select the "New File..." option
- In the popup sheet, select "Swift" as the template and then click the "Next" button
- A "Save As" popup sheet should appear and then click "Create" (you can rename the file first if you want to)
- If Xcode asks you to create a "Objective-C Bridging Header" choose "Create Objective-C Bridging Header"
Troubleshooting: Xcode Build Error (Undefined symbol)
When installing this library on Xcode 12+, you'll get the following error in Xcode:
Undefined symbol: (extension in UIKit):
__C.UIMenu.init(title: Swift.String, image: __C.UIImage?, identifier: __C.UIMenuIdentifier?, options: __C.UIMenuOptions, children: [__C.UIMenuElement]) -> __C.UIMenu
Undefined symbol: (extension in UIKit):
__C.UIAction.init(title: Swift.String, image: __C.UIImage?, identifier: __C.UIActionIdentifier?, discoverabilityTitle: Swift.String?, attributes: __C.UIMenuElementAttributes, state: __C.UIMenuElementState, handler: (__C.UIAction) -> ()) -> __C.UIAction
To fix this, see screenshot + follow the steps below:
- Open your
ios/project.xcworkspace
project. - In the project navigator panel (located on the right side of Xcode), select your project group (i.e. the item with the blueprint icon).
- The Xcode project editor should appear. In the left panel, under the "Project" section, select your project (if it isn't already selected).
- In the project section's top tab bar, select the "Build Settings" tab (also make sure the "All" and "Combined" tabs are selected).
- In the project navigator list, under the "Search Path" section, there should be a "Library Search Paths" setting (alternatively, you can search for "Library Search Paths" in the search bar).
- According to this issue comment, you can clear all the items listed in the "Library Search Paths" setting by selecting the items in the list, and pressing the "-" button in the popover.
- TLDR: Xcode automatically manages this setting, and the RN template hardcodes it to use Swift 5.0.
- Alternatively, you can change the entry
"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"
to"$(TOOLCHAIN_DIR)/usr/lib/swift-5.3/$(PLATFORM_NAME)"
i.e. changeswift-5.0
toswift-5.3
, or whatever the newest version of swift that comes with your Xcode installation (to show the popup dialog, double click the value/item).
- If you haven't already, make sure to create an empty swift file. Then clean the build folder (the option is in the menu bar under: "Product" -> "Clean Build Folder") and try building your project again.
- If you are still having problems building the app, try the following and build your project again:
- Try clearing out Xcode's
derivedData
directory:rm -rf ~/Library/Developer/Xcode/DerivedData/*
(check out this gist for instructions on how to clean up Xcode) - Try clearing out the
Cocoapods
cache:rm -rf "${HOME}/Library/Caches/CocoaPods"
(and then try runningpod install
again).
Explanation: Some versions of the react-native template hard codes the swift library search paths to use swift 5.0
(which causes the linker to mismatch the swift system libraries bundled with your Xcode + iOS/Simulator installation).
Here are some related issues in the RN repo: Issue 30202 and Issue 29178.
C. Basic Usage
For more examples, check out the Usage And Examples section.
import * as React from 'react';
import { StyleSheet, Text } from 'react-native';
import { ContextMenuView } from 'react-native-ios-context-menu';
export function BasicUsageExample01() {
return (
<ContextMenuView
style={styles.container}
menuConfig={{
menuTitle: 'BasicUsageExample01',
menuItems: [{
actionKey : 'key-01',
actionTitle: 'Action #1',
}, {
actionKey : 'key-02' ,
actionTitle: 'Action #2',
}, {
actionKey : 'key-03' ,
actionTitle: 'Action #3',
}],
}}
>
<Text style={styles.text}>
Press And Hold To Show Context Menu
</Text>
</ContextMenuView>
);
};
const styles = StyleSheet.create({
container: {
margin: 10,
padding: 10,
},
text: {
fontSize: 16,
},
});
D. Documentation
π‘ Tip: Most of the time, when a type or component is mentioned, you can click it to jump to that item in the README (or its declaration in the source code).
D.1. Components
ContextMenuView
Component
ContextMenuView
Component: Props
Prop Name and Type | Description |
---|---|
βοΈ ViewProps | This component supports all the standard props from a <View/> component. |
π€ menuConfig βοΈ MenuConfig | This prop configures the context menu, along with what menu actions to show.This prop accepts a MenuConfig object. This object is used to configure various aspects of the context menu. Here are some relevant properties:1οΈβ£ MenuConfig.menuTitle : the context menu title (required) β if you don't want to show the menu title, pass in an empty string.2οΈβ£ MenuConfig.menuItems : the actions to show (e.g. the title, icons, subtitle, etc) β accepts either an array of MenuActionConfig or MenuConfig objects.3οΈβ£ MenuConfig.menuOptions : the attributes of the context menu (e.g. destructive) β accepts an array of UIMenuOptions string items, and any nested menus or submenus to show (see "Note A"). π Note A: Passing a MenuConfig object inside of the MenuConfig.menuItems property will result in a nested context menu (i.e. a submenu).In this scenario, the MenuConfig.menuOptions and MenuConfig.icon can be used to configure the appearance of the submenu.For usage examples regarding nested menus, see Example 06.π Note B: Passing a value of null (or undefined ) to this prop will not disable the context menu. Instead, please use the isContextMenuEnabled prop to disable the context menu. π Note C: You can put MenuConfig in state if you want to dynamically change the menu configuration (this will allow you to add/remove submenu items, or update the current menu options).If the context menu is currently visible, changing/updating the MenuConfig value passed to this prop will cause the context menu to change in real-time. This behavior is only supported on iOS 14+.π Some example links to get you started:β’ For basic usage examples regarding MenuConfig , see: Example 1,β’ For examples on creating + configuring the menu action items (i.e MenuActionConfig ), see: Example 2,β’ For menu action attributes + menu state, and action subtitles, see: Example 4, Example 8, and Example 13,β’ For examples regarding the usage of icons (i.e ImageItemConfig ), see: Example 16, Example 17, and Example 18. |
π€ previewConfig βοΈ MenuPreviewConfig | Configures the context menu's preview.If no configuration is provided then it will default to using the context menu component itself as the preview.π Note: If you do not want to show a preview (i.e. only show the context menu itself), consider using a ContextMenuButton component instead.π Some example links to get you started:β’ For examples regarding the configuration of the context menu preview (e.g. custom previews), see: Example 11, Example 12, Example 14, and Example 15. |
π€ shouldUseDiscoverability TitleAsFallbackValueForSubtitle βοΈ boolean β³οΈ Default: true | On iOS 15+, the value passed to the MenuActionConfig.discoverabilityTitle property is no longer displayed as a subtitle under the menu action.Instead you need to set a different property called MenuActionConfig.subtitle .The discoverabilityTitle property is now used for the "discoverability heads-up display" (e.g when an app supports keyboard shortcuts, holding down the command key presents a list of shortcuts; the discoverabilityTitle is then used as the title for the shortcut).If this prop is set to true, it will then use the value passed on to the discoverabilityTitle value as the subtitle for the menu action, preserving the old behavior. In other words, this prop exists for backwards-compatibility reasons.π Note: This prop is set to true by default; set this to false if you don't want this automatic behaviour to happen. |
π€ shouldWaitForMenuToHide BeforeFiringOnPressMenuItem βοΈ boolean β³οΈ Default: true | If set to true (which it is by default), the onPressMenuItem event will be triggered after the context menu has been hidden (i.e. after onMenuDidHide event is triggered).Set this to false if you want onPressMenuItem to trigger as soon as an item has been pressed in the context menu.π Note: Layout updates while the context menu is transitioning from it's open to hidden state might cause layout flickering (e.g. Issue #43). |
π€ isContextMenuEnabled βοΈ boolean β³οΈ Default: true | Enables or disables the context menu. Useful if you want to temporarily disable the context menu. |
π€ lazyPreview βοΈ boolean β³οΈ Default: true | If set to true (which it is by default), the custom context menu preview (i.e. the component returned from the ContextMenuView.renderPreview prop) and the auxiliary preview (i.e. the component returned from the ContextMenuView.renderAuxillaryPreview prop) are only mounted/rendered when the context menu is visible.Set this to false if you want the preview content to be always mounted. |
π€ shouldEnable AggressiveCleanup βοΈ boolean β³οΈ Default: true | Deprecated. This prop no longer does anything (see shouldCleanupOnComponentWillUnmount ForMenuPreview , and shouldCleanup OnComponentWillUnmountForAuxPreview ). |
π€ useActionSheetFallback βοΈ boolean β³οΈ Default: true | Context menus are only supported on iOS 13+ (i.e context menus are not supported on iOS 12, and below).On iOS 12 and below, a long press on a ContextMenuView will show a ActionSheetIOS menu based on the current menuConfig prop. If you want to disable this behavior, set this prop to false.π Note: Default value is false on iOS 13+, and true on iOS 12 and below. |
π€ renderPreview βοΈ () => React.ReactElement | This prop is a "render" prop, i.e it accepts a function that returns a react component.The returned component will displayed in the context menu preview. |
π€ isAuxiliaryPreviewEnabled βοΈ boolean β³οΈ Default: false | β οΈ Experimental: Please see Auxiliary Preview section.TBA |
π€ auxiliaryPreviewConfig βοΈ MenuAuxiliaryPreviewConfig | β οΈ Experimental: Please see Auxiliary Preview section.TBA |
π€ renderAuxillaryPreview βοΈ () => React.ReactElement | β οΈ Experimental: Please see Auxiliary Preview section.TBA |
π€ internalCleanupMode βοΈ RNICleanupMode β³οΈ Default: automatic | Internally, a clean up routine is triggered whenever a component is unmounted.However, if the clean up routine is triggered too early, this will lead to the context menu component disappearing (E.g. issue #34).If you are experiencing this issue, you can disable the clean up routine from triggering altogether by setting this prop to disabled .Additionally, you can also try setting this prop to either to viewController , didMoveToWindowNil , or reactComponentWillUnmount .viewController mode will trigger the clean up routine via the UIViewController.viewWillDisappear lifecycle method, and didMoveToWindowNil will trigger the cleanup routine during the UIView.didMoveToWindow lifecycle method, while the reactComponentWillUnmount mode on the other hand, will trigger the clean up routine via the componentWillUnmount react lifecycle event. |
π€ shouldCleanupOnComponent WillUnmountForMenuPreview βοΈ boolean β³οΈ Default: false | If set to true , the custom preview is immediately freed from memory once the context menu is closed.π Note: For the immediately cleanup to take effect, the lazyPreview prop also needs to be enabled. |
π€ shouldCleanupOnComponent WillUnmountForAuxPreview βοΈ boolean β³οΈ Default: false | If set to true , the aux. preview is immediately freed from memory once the context menu is closed.π Note: For the immediately cleanup to take effect, the lazyPreview prop also needs to be enabled. |
ContextMenuView
Component: Event Props
Prop Name and Type | Description |
---|---|
π€ onMenuWillShow βοΈ OnMenuWillShowEvent | Event that gets called before the context menu is shown, i.e this event is immediately invoked when the menu is about to become visible. |
π€ onMenuDidShow βοΈ OnMenuDidShowEvent | Event that gets called after the context menu is shown, i.e this event is invoked after the menu entrance animation is finished. |
π€ onMenuWillHide βοΈ OnMenuWillHideEvent | Event that gets called before the context menu is hidden, i.e this event is immediately invoked when the menu is about to become hidden. |
π€ onMenuDidHide βοΈ OnMenuDidHideEvent | Event that gets called after the context menu is hidden, i.e this event is invoked after the menu exit animation is finished. |
π€ onMenuWillCancel βοΈ OnMenuWillCancelEvent | Event that gets called when the menu is cancelled and about to be hidden, i.e this event is immediately invoked when the context menu interaction is cancelled. |
π€ onMenuDidCancel βοΈ OnMenuDidCancelEvent | Event that gets called when the menu is cancelled and hidden, i.e. this event is invoked when the context menu is cancelled, and the menu exit transition is finished. |
π€ onPressMenuItem βοΈ OnPressMenuItemEvent | Event that gets called when a menu action is pressed. You can identify which action was pressed via nativeEvent.actionKey property in the nativeEvent object. Check out Example 1, and Example 9 for examples regarding the onPressMenuItem event prop. π Note: If shouldWaitForMenuToHide BeforeFiringOnPressMenuItem prop is set to true (which it is by default), then this event will fire after onMenuDidHide is triggered. |
π€ onPressMenuPreview βοΈ OnPressMenuPreviewEvent | Event that gets called when the menu's preview is pressed. |
π€ onMenuAuxiliaryPreviewWillShow βοΈ OnMenuAuxiliaryPreviewWillShowEvent | β οΈ Experimental: Please see Auxiliary Preview section.TBA |
π€ onMenuAuxiliaryPreviewDidShow βοΈ OnMenuAuxiliaryPreviewDidShowEvent | β οΈ Experimental: Please see Auxiliary Preview section.TBA |
π€ onMenuAuxiliaryPreviewDidShow βοΈ DeferredElementProvider i.e. (deferredID, completion)Β =>Β void | This event gets called whenever a UIDeferredMenuElement needs to be loaded. A deferred menu element can be created via a DeferredMenuElementConfig object.A deferred menu is a context menu is basically a placeholder β i.e. it appears as a loading indicator in the context menu. When you pass in a DeferredMenuElementConfig object to MenuConfig.menuItems , it means you want to load and add additional menu items once the context menu is opened.This event will provide a completion callback β use this to provide the additional context menu items you want to load.π Note A: Deferred menu elements only work on iOS 14+.π Note B: You can dynamically update the context menu items without using the prop β the difference is that deferred menu items will show a placeholder loading indicator when the additional menu items haven't been loaded yet.π Note C: It is possible to have multiple deferred menu elements (e.g. deferred elements can also provide deferred elements, and so on).Just be sure to use a unique deferredID so you can tell them apart.π Example Usage:β’ ContextMenuViewExample19 . |
ContextMenuView
Component: Properties/Methods
Prop Name and Type | Description |
---|---|
π€ dismissMenu βοΈ Promise<Void> | Allows you to programmatically dismiss the context menu. Only available on iOS 14 and above. |
π€ presentMenu βοΈ Promise<Void> | Allows you to programmatically show the context menu. |
π€ showAuxiliaryPreviewAsPopover βοΈ Promise<Void> | Allows you to programmatically show the auxiliary preview as a popover. |
ContextMenuView
Component: Experimental - Auxiliary Preview
The context menu auxiliary preview is an experimental feature, and is not officially part of UIKit
's "Menu and Shortcuts" API.
This is just a feature that I've implemented myself and added to the library β as such official support is limited and might break in a future iOS version. Please use at your own risk.
ContextMenuButton
Component
For basic usage, please see Example 1 section.
The
ContextMenuButton
component is almost the same as theContextMenuView
component (It supports the same kind of props and events).The only difference between them is that the
ContextMenuButton
component does not have a preview, and it can be immediately shown when its tapped instead of having to do a long press. See Example 2 for more details.Note that
ContextMenuButton
is only available on iOS 14 and above. On iOS 13, it will use aContextMenuButton
, and on iOS 12 and below, it will use theActionSheetFallback
module to present aActionSheetIOS
menu.If you want to add additional touch events, you can wrap this component inside a button component (e.g.
TouchableOpacity
). * When wrapping this component inside a button, please make sure to set theuseActionSheetFallback
prop tofalse
.
ContextMenuButton
Component: Props
Prop Name and Type | Description |
---|---|
βοΈ ViewProps | This component supports all the standard props from a <View/> component. |
π€ menuConfig βοΈ MenuConfig | Same as ContextMenuView.menuConfig prop. |
π€ isMenuPrimaryAction βοΈ boolean | When set to true, the context menu will be shown when its tapped instead of a long press. |
π€ shouldUseDiscoverability TitleAsFallbackValueForSubtitle βοΈ boolean β³οΈ Default: true | TBA / Not Implented |
π€ enableContextMenu βοΈ boolean β³οΈ Default: true | Same as ContextMenuView.enableContextMenu prop. |
π€ useActionSheetFallback βοΈ boolean β³οΈ Default: true | Same as ContextMenuView.useActionSheetFallback prop. |
ContextMenuButton
Component: Event Props
Prop Name and Type | Description |
---|---|
π€ onMenuWillShow βοΈ OnMenuWillShowEvent | Same as ContextMenuView.onMenuWillShow event. |
π€ onMenuDidShow βοΈ OnMenuDidShowEvent | Same as ContextMenuView.onMenuDidShow event. |
π€ onMenuWillHide βοΈ OnMenuWillHideEvent | Same as ContextMenuView.onMenuWillHide event. |
π€ onMenuDidHide βοΈ OnMenuDidHideEvent | Same as ContextMenuView.onMenuDidHide event. |
π€ onMenuWillCancel βοΈ OnMenuWillCancelEvent | Same as ContextMenuView.onMenuWillCancel event. |
π€ onMenuDidCancel βοΈ OnMenuDidCancelEvent | Same as ContextMenuView.onMenuDidCancel event. |
π€ onMenuWillCreate βοΈ OnMenuWillCreateEvent | Same as ContextMenuView.onMenuWillCreate event. |
π€ onPressMenuItem βοΈ OnPressMenuItemEvent | Same as ContextMenuView.onPressMenuItem event. |
ContextMenuButton
Component: Properties/Methods
Prop Name and Type | Description |
---|---|
π€ dismissMenu βοΈ Promise<Void> | Same as ContextMenuView.dismissMenu method. |
ActionSheetFallback
Module
A module to show a ActionSheetIOS
menu based on a MenuConfig
object.
This module attempts to approximate UIMenu
behavior using ActionSheetIOS
, so it's very limited (i.e. it does not support menu/action icons, etc.), but it does support things like submenu's, destructive actions/menu's, inline submenu's, and hidden actions.
Import the module like this:
import { ActionSheetFallback } from "react-native-ios-context-menu";
To present a οΏΌοΏΌ
ActionSheetIOS
menu, callconst selectedAction = await ActionSheetFallback.show(menuConfig)
Function | Description |
---|---|
π€ show βοΈ (menuConfig: MenuConfig): Promise<MenuAction Β¦ null> | This function accepts a MenuConfig object and returns the selected MenuAction object or null if cancelled. |
D.2. Context
ContextMenuViewContext
Context
TBA
Property | Description |
---|---|
π€ isMenuVisible βοΈ boolean | TBA |
π€ getRefToContextMenuView βοΈ ()Β =>Β ContextMenuView π ContextMenuView | TBA |
ContextMenuButtonContext
Context
TBA
Property | Description |
---|---|
π€ isMenuVisible βοΈ boolean | TBA |
π€ getRefToContextMenuButton βοΈ ()Β =>Β ContextMenuView π ContextMenuButton | TBA |
D.3. Hooks
useMenuContext
Hook
A hook to use the ContextMenuViewContext
context.
TBA
useMenuButtonContext
Hook
A hook to use the ContextMenuButtonContext
context.
TBA
D.4. Objects and Types
MenuConfig.ts
- π Declaration:
MenuConfig.ts
Object Type: MenuConfig
A container for grouping related menu elements in an app menu or contextual menu.
An object that is used to create and configure a context menu. Internally, this object is used to create a UIMenu
instance (see apple docs for more information).
Name and Type | Description |
---|---|
π€ type βοΈ string , i.e"menu" | TBA |
π€ menuTitle βοΈ string | TBAπ Note: If you don't want a menu title to appear for your context menu, just pass in an empty string to this property. |
π€ menuSubtitle βοΈ string | TBAπ Note: Requires iOS 15+. |
π€ menuOptions βοΈ Array<UIMenuOptions> π UIMenuOptions | TBA |
π€ menuPreferredElementSize βοΈ MenuElementSize | TBA |
π€ menuItems βοΈ MenuElementConfig[] i.e. MenuConfig Β¦ MenuActionConfig Β¦ DeferredMenuElementConfig π MenuConfig π MenuActionConfig π DeferredMenuElementConfig | TBA |
π€ icon βοΈ IconConfig ¦ ImageItemConfig π IconConfig (deprecated)π ImageItemConfig | TBA |
Object Type: MenuActionConfig
An object that is used to create a menu action item in the context menu. Internally, this object is used to create a UIAction
instance (see apple docs for more information),
Name and Type | Description |
---|---|
π€ type βοΈ string , i.e "action" | TBA |
π€ Required: actionKey βοΈ string | TBA |
π€ Required: actionTitle βοΈ string | TBA |
π€ actionSubtitle βοΈ string | TBA |
π€ menuState βοΈ MenuState | TBA |
π€ menuAttributes βοΈ Array<MenuAttributes> π MenuAtrributes | TBA |
π€ discoverabilityTitle βοΈ string | TBA |
π€ icon βοΈ IconConfig Β¦ ImageItemConfig π IconConfig (deprecated)π ImageItemConfig | TBA |
Object Type: DeferredMenuElementConfig
An object that is used to create a deferred menu element. Internally, this object is used to create a UIDeferredMenuElement
instance (see apple docs for more information),
Name and Type | Description |
---|---|
π€ Required: type βοΈ string i.e. deferred . | TBA |
π€ Required: deferredID βοΈ string | TBA |
π€: shouldCache βοΈ boolean | TBA |
String Union: MenuAttributes
Attributes that determine the style of the menu element.
A union string type that maps to UIMenuElement.Attributes
enum (see apple docs for more information).
Type | Description |
---|---|
βοΈ hidden | TBA |
βοΈ disabled | TBA |
βοΈ destructive | TBA |
βοΈ keepsMenuPresented | TBA |
String Union: MenuState
Constants that indicate the state of an action- or command-based menu element.
A union string type that maps to UIMenuElement.State
enum (see apple docs for more information).
Type | Description |
---|---|
βοΈ on | TBA |
βοΈ off | TBA |
βοΈ mixed | TBA |
String Union: UIMenuOptions
Options for configuring a menu's appearance.
A union string type that maps to UIMenu.Options
option set (see apple docs for more information).
Type | Description |
---|---|
βοΈ destructive | TBA |
βοΈ displayInline | TBA |
String Union: MenuElementSize
Constants that determine the size of an element in a menu.
A union string type that maps to UIMenu.ElementSize
enum (see apple docs for more information).
Type | Description |
---|---|
βοΈ small | TBA |
βοΈ medium | TBA |
βοΈ large | TBA |
MenuPreviewConfig.ts
- π Declaration:
MenuPreviewConfig.ts
Object Type: MenuPreviewConfig
Name and Type | Description |
---|---|
π€ previewType βοΈ MenuPreviewType β³οΈ Default: DEFAULT | TBA |
π€ previewSize βοΈ MenuPreviewSize β³οΈ Default: INHERIT | TBA |
π€ isResizeAnimated βοΈ boolean β³οΈ Default: true | TBA |
π€ borderRadius βοΈ number | TBA |
π€ backgroundColor βοΈ DynamicColor ¦ string π DynamicColor | TBA |
π€ previewSize βοΈ ContextMenuInteractionCommitStyle β³οΈ Default: dismiss | TBA |
π€ targetViewNode βοΈ number | TBA |
String Union: ContextMenuInteractionCommitStyle
Name and Type | Description |
---|---|
βοΈ dismiss | TBA |
βοΈ pop | TBA |
String Union: MenuPreviewSize
Name and Type | Description |
---|---|
βοΈ INHERIT | TBA |
βοΈ STRETCH | TBA |
String Union: MenuPreviewType
Name and Type | Description |
---|---|
βοΈ DEFAULT | TBA |
βοΈ CUSTOM | TBA |
MenuAuxiliaryPreviewConfig.ts
- π Declaration:
MenuAuxiliaryPreviewConfig.ts
Object Type: MenuAuxiliaryPreviewConfig
Name and Type | Description |
---|---|
π€ height βοΈ number | TBA |
π€ anchorPosition βοΈ MenuAuxiliaryPreviewAnchorPosition β³οΈ Default: automatic | TBA |
π€ alignmentHorizontal βοΈ MenuAuxiliaryPreviewHorizontalAlignment β³οΈ Default: stretchPreview | TBA |
π€ marginPreview βοΈ number | TBA |
π€ marginAuxiliaryPreview βοΈ number | TBA |
π€ transitionConfigEntrance βοΈ MenuAuxiliaryPreviewTransitionConfig | TBA |
π€ transitionEntranceDelay βοΈ MenuAuxiliaryPreviewTransitionEntranceDelay | TBA |
String Union Type: MenuAuxiliaryPreviewAnchorPosition
Name and Type | Description |
---|---|
βοΈ top | TBA |
βοΈ bottom | TBA |
βοΈ automatic | TBA |
String Union Type: MenuAuxiliaryPreviewHorizontalAlignment
Name and Type | Description |
---|---|
βοΈ stretchScreen | TBA |
βοΈ stretchPreview | TBA |
βοΈ previewLeading | TBA |
βοΈ previewTrailing | TBA |
βοΈ previewCenter | TBA |
String Union Type: UIViewAnimateOptions
Name and Type | Description |
---|---|
βοΈ curveEaseIn | TBA |
βοΈ curveEaseOut | TBA |
βοΈ curveEaseInOut | TBA |
βοΈ curveLinear | TBA |
Object Type: UIViewAnimateConfig
Name and Type | Description |
---|---|
π€ duration βοΈ number | TBA |
π€ delay βοΈ number | TBA |
π€ options βοΈ UIViewAnimateOptions[] | TBA |
Object Type: MenuAuxiliaryPreviewBaseTransitionConfig
This type is an object tagged union type, with the transition
property being the tag that separates the unions.
The table below defines the possible valid values that can be assigned to the type
property (the subsequent tables are the different possible unions).
Name and Type | Description |
---|---|
π€ transition βοΈ string i.e. 'none' Β¦ 'fade' 'slide' Β¦ 'zoom' Β¦ 'zoomAndSlide' | TBA |
Name and Type | Description |
---|---|
π€ transition βοΈ string i.e. none | TBA |
Name and Type | Description |
---|---|
π€ transition βοΈ string i.e. fade | TBA |
Name and Type | Description |
---|---|
π€ transition βοΈ string i.e. slide | TBA |
π€ slideOffset βοΈ number | TBA |
Name and Type | Description |
---|---|
π€ transition βοΈ string i.e. zoom | TBA |
π€ zoomOffset βοΈ number | TBA |
Name and Type | Description |
---|---|
π€ transition βοΈ string i.e. zoomAndSlide | TBA |
π€ slideOffset βοΈ number | TBA |
π€ zoomOffset βοΈ number | TBA |
Object Union Type: MenuAuxiliaryPreviewTransitionConfig
This type is a union between the UIViewAnimateConfig
object type, and the MenuAuxiliaryPreviewBaseTransitionConfig
object type.
export type MenuAuxiliaryPreviewTransitionConfig =
| UIViewAnimateConfig
| MenuAuxiliaryPreviewBaseTransitionConfig;
Mixed Union Type: MenuAuxiliaryPreviewTransitionEntranceDelay
.
Name and Type | Description |
---|---|
βοΈ number | TBA |
βοΈ RECOMMENDED | TBA |
βοΈ AFTER_PREVIEW | TBA |
MenuIconConfig.ts
- π Declaration:
MenuIconConfig.ts
Object Type: IconConfig
This has been deprecated and will be removed in a future version. Use ImageItemConfig
instead. For documentation regarding IconConfig
, please see the documentation in the old README.
ImageItemConfig.ts
- π Declaration:
ImageItemConfig.ts
Object Type: ImageItemConfig
This type is an object tagged union type, with the type
property being the tag that separates the unions. The table below defines the possible valid values that can be assigned to the type
property.
Name and Type | Description |
---|---|
π€ Required: type βοΈ ImageItemConfigType string union, i.e. 'IMAGE_ASSET' Β¦ 'IMAGE_SYSTEM' Β¦ 'IMAGE_REQUIRE' Β¦ 'IMAGE_EMPTY' Β¦ 'IMAGE_RECT' Β¦ 'IMAGE_GRADIENT' Β¦ 'IMAGE_REMOTE_URL' | TBA |
ImageItemConfig
: IMAGE_ASSET
Name and Type | Description |
---|---|
π€ Required: type βοΈ string i.e 'IMAGE_ASSET' | TBAπ Maps to UIImage.init(named:) constructor in the apple docs. |
π€ Required: imageValue βοΈ string | TBA |
π€ imageOptions? βοΈ ImageOptions | TBA |
ImageItemConfig
: IMAGE_SYSTEM
Name and Type | Description |
---|---|
π€ Required: type βοΈ string i.e 'IMAGE_SYSTEM' | TBAπ Maps to UIImage.init(systemName:withConfiguration:) constructor in the apple docs. |
π€ Required: imageValue βοΈ ImageSystemConfig | TBAπ Maps to the withConfiguration argument label in the UIImage.init(systemName:withConfiguration:) constructor in the apple docs. |
imageOptions βοΈ ImageOptions | TBA |
π€ imageLoadingConfig βοΈ ImageLoadingConfig | TBA |
ImageItemConfig
: IMAGE_EMPTY
Name and Type | Description |
---|---|
π€ Required: type βοΈ string i.e 'IMAGE_EMPTY' | TBA |
ImageItemConfig
: IMAGE_RECT
Name and Type | Description |
---|---|
π€ Required: type βοΈ string i.e 'IMAGE_RECT' | TBAπ Note: Programmatically creates an image using UIGraphicsImageRenderer . |
π€ Required: imageValue βοΈ ImageRectConfig | TBA |
ImageItemConfig
: IMAGE_GRADIENT
Name and Type | Description |
---|---|
π€ Required: type βοΈ string i.e 'IMAGE_GRADIENT' | TBAπ Note: Programmatically creates an image using UIGraphicsImageRenderer . |
π€ imageValue βοΈ ImageGradientConfig | TBA |
imageOptions βοΈ ImageOptions | TBA |
ImageItemConfig
: IMAGE_REMOTE_URL
Name and Type | Description |
---|
| π€ **Required
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
4 months ago
6 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
6 months ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago