You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Catalyst中自定义类内buildMenuWithBuilder方法无法调用问题

解决RNCatalystMenu中buildMenuWithBuilder方法不生效的问题

以下是针对你代码问题的排查点和解决方案:

1. 确保应用实际使用RNCatalystMenu作为委托类

你的RNCatalystMenu继承自AppDelegate,但如果项目仍使用原AppDelegate作为UIApplication的委托,这个类的方法永远不会被调用。

  • 打开Info.plist,找到Principal class项,将其值改为RNCatalystMenu
  • 或者在main.m中修改启动代码,将委托设置为RNCatalystMenu实例:
int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([RNCatalystMenu class]));
    }
}

2. 重写方法时调用父类实现

buildMenuWithBuilder:是UIResponder的方法,重写时需要先调用父类的实现,保证菜单构建的基础流程正常执行:

- (void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder
{
    [super buildMenuWithBuilder:builder]; // 必须先调用父类方法
    [builder removeMenuForIdentifier:UIMenuEdit];
    [builder removeMenuForIdentifier:UIMenuFormat];
    [builder removeMenuForIdentifier:UIMenuHelp];
}

3. 检查iOS版本兼容性

buildMenuWithBuilder:是iOS 13.0及以上才支持的API,如果你的项目部署目标低于iOS 13,这个方法不会被系统调用。需要在项目设置中确认Deployment Target为iOS 13.0+。

4. 验证菜单标识符有效性

在Catalyst环境中,部分系统菜单的标识符可能存在差异,你可以先打印所有现有菜单的标识符来确认:

- (void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder
{
    [super buildMenuWithBuilder:builder];
    // 打印所有菜单标识符
    for (UIMenu *menu in builder.menus) {
        NSLog(@"Menu Identifier: %@", menu.identifier);
    }
    // 再执行移除操作
    [builder removeMenuForIdentifier:UIMenuEdit];
    [builder removeMenuForIdentifier:UIMenuFormat];
    [builder removeMenuForIdentifier:UIMenuHelp];
}

你的原始代码参考

.h文件

#import "AppDelegate.h"

NS_ASSUME_NONNULL_BEGIN

@interface RNCatalystMenu : AppDelegate

@end

NS_ASSUME_NONNULL_END

.m文件

#import "RNCatalystMenu.h"

@implementation RNCatalystMenu : AppDelegate

- (void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder
{
  [builder removeMenuForIdentifier:UIMenuEdit];
  [builder removeMenuForIdentifier:UIMenuFormat];
  [builder removeMenuForIdentifier:UIMenuHelp];
}

@end

内容的提问来源于stack exchange,提问作者Jerry Seigle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:55:18