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

NativeScript中如何在Xcode项目中使用自定义Objective-C类

直接调用Objective-C类的方案:不用插件,不用框架

完全不用搞插件那套复杂流程,也不需要把你的Objective-C类打包成框架——你已经把OC类加到Xcode项目目标里了,只要做几步简单配置,就能在NativeScript的JS代码里直接调用它们。

第一步:确保你的OC类对外暴露

NativeScript只能访问公开声明的Objective-C类和方法,所以你需要把MyCustomViewController的接口写到.h头文件里,比如:

#import <UIKit/UIKit.h>

@interface MyCustomViewController : UIViewController
// 把你要调用的方法都声明在这里,比如你要用的init方法
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
@end

如果你的类之前是只在.m里的私有类,一定要把@interface移到.h里,不然NativeScript看不到它。

第二步:让NativeScript生成JS绑定

NativeScript会自动扫描Xcode项目里的OC代码,但有时候需要明确告诉它要处理哪些类。在你的NativeScript项目的App_Resources/iOS目录下,创建一个metadata-generator.json文件,内容如下:

{
  "includedClasses": [
    "MyCustomViewController"
  ]
}

这个文件会让NativeScript在构建时,专门为MyCustomViewController生成对应的JS调用绑定。

第三步:修正你的JS调用代码

NativeScript对OC方法的命名有转换规则(把冒号去掉,参数按顺序拼接),所以你原来的代码需要调整一下:

// 直接从ios命名空间获取你的自定义类
const MyCustomViewController = ios.MyCustomViewController;

// 初始化视图控制器:OC的initWithNibName:bundle:对应JS的initWithNibNameBundle
const vc = MyCustomViewController.alloc().initWithNibNameBundle("你的Xib文件名", null);

// 展示视图控制器:OC的presentViewController:animated:completion:对应JS的presentViewControllerAnimatedCompletion
page.frame.ios.controller.presentViewControllerAnimatedCompletion(vc, true, null);

注意:

  • 你的Xib文件要放到App_Resources/iOS目录下,不然NativeScript找不到它。
  • Xib的文件所有者要设置为MyCustomViewController,不然加载Xib时会出错。

第四步:构建运行

直接运行tns run ios,NativeScript会自动把你的OC类、Xib文件打包到iOS应用里,同时生成绑定代码——这时候你的JS代码就能正常调用自定义视图控制器了。

常见坑提醒

  • 如果遇到「找不到类」的错误:检查.h文件是否正确声明了类、metadata-generator.json里的类名有没有拼写错误。
  • 如果Xib加载失败:确认Xib文件名和代码里的一致,文件所有者设置正确,并且Xib已经加到NativeScript的App_Resources/iOS目录。
  • 如果OC类依赖其他资源(比如图片、其他类):确保这些资源也都在Xcode项目目标里,NativeScript会一并打包。

内容的提问来源于stack exchange,提问作者Nicolas Manzini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:42:43