警告 UIMenuController 已从 iOS 16 中弃用。请使用 UIEditMenuInteraction 代替。

MenuItemKit

MenuItemKitUIMenuItem 提供图像和块(闭包)支持。

MenuItemKit 是一个 Swift 项目,但毫无疑问地支持 Objective-C。

Screenshot

安装

Swift Package

将此仓库 URL 添加到您的 Swift 包依赖项。

CocoaPods

pod 'MenuItemKit', '~> 4.0.0'

Xcode 子项目

  1. MenuItemKit 仓库添加为应用程序仓库的子模块。
  2. MenuItemKit.xcodeproj 拖放到应用程序的 Xcode 项目或工作区中。
  3. 在应用程序目标设置的“General(通用)”选项卡上,将 MenuItemKit.framework 添加到“Embedded Binaries(嵌入式二进制文件)”部分。

如果您更喜欢使用 Carthage,请发起 pull request。

如何使用

MenuItemKit 非常容易采用,它只提供 2 个 API

typealias MenuItemAction = (UIMenuItem) -> ()

extension UIMenuItem {
    convenience init(title: String, image: UIImage?, action: MenuItemAction)
    convenience init(title: String, action: MenuItemAction)
}

对于 Objective-C,MenuItemKit 出于安全原因提供了带有前缀的 API 名称

@interface UIMenuItem (SWIFT_EXTENSION(MenuItemKit))
- (nonnull instancetype)mik_initWithTitle:(NSString * _Nonnull)title image:(UIImage * _Nullable)image action:(MenuItemAction _Nonnull)action;
- (nonnull instancetype)mik_initWithTitle:(NSString * _Nonnull)title action:(MenuItemAction _Nonnull)action;
@end

只需使用上述 API 初始化 UIMenuItem,并将它们设置为 UIMenuItemControllermenuItemsMenuItemKit 将负责其余部分,您无需在视图或视图控制器中添加任何与响应者链相关的代码。

查看 dome 项目(同时提供 Swift 和 Objective-C)以获取更多详细信息。

高级用法

对于您无法控制的菜单项,您可以使用 static func installTo(responder: UIResponder, shouldShowForAction: @escaping (Selector, Bool) -> Bool = default) 来配置项目的可见性。请查看 AutoPopupMenuControllerDemo

关于我

许可证

MenuItemKit 是在 MIT 许可证下发布的。简而言之,它是免版税的,但您必须在代码或软件分发中保留版权声明。