我在使用它的.xib实例化UIViewController时遇到了问题。
我的代码如下所示:(实际上,请看这里:https://github.com/mrtnbroder/titanium-module-test)
- (void)open:(id)args
{
ENSURE_UI_THREAD(open, args);
CustomViewController *viewController = [[CustomViewController alloc] initWithNibName:@"CustomViewController" bundle:nil];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[[TiApp app] showModalController:navigationController animated:YES];
}
我的.xib文件名为CustomViewController.xib
看起来像这样:
然而,当我构建它时,我的应用程序看起来像这样:
为什么呢?怎么了?
答案 0 :(得分:1)
问题是你的笔尖不在主包中。您应该首先将所有笔尖复制到 module_folder / assets中的文件夹中。
将该文件夹重命名为Titanium.bundle。
所以你的目录结构看起来像 module_folder /assets/Titanium.bundle
这将确保您的笔尖在编译时被复制到模块中。
我在NSBundle上创建了一个类别:
//Shortcut if you want to name the bundle Titanium you'll be ahead of the game
+ (NSBundle *)titaniumBundle
{
return [NSBundle titaniumBundleWithName:@"Titanium"];
}
//Bundles are put in a folder called modules inside the application's main bundle
+ (NSBundle *)titaniumBundleWithName:(NSString *)bundleName
{
//Change this to accommodate the module's id
static NSString *appId = @"com.companyname.module";
NSString *bundlePath = [NSString stringWithFormat:@"modules/%@/%@.bundle", appId, bundleName];
bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:bundlePath];
return [NSBundle bundleWithPath:bundlePath];
}
然后,您将在您正在使用的文件中包含该类别并对其进行编码:
CustomViewController *viewController =
[[CustomViewController alloc] initWithNibName:@"CustomViewController"
bundle:[NSBundle titaniumBundle]];
然后你至少要从正确的目录中加载视图。
答案 1 :(得分:0)
如果不是,请检查didFinishLaunchingWithOptions
AppDelegate
方法
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
答案 2 :(得分:0)
这一行:
CustomViewController *viewController =
[[CustomViewController alloc] initWithNibName:@"CustomViewController"
bundle:nil];
建议你应该调用你的xib文件“CusomViewController.xib”。
<强>更新强>
通过编辑问题(以及您的评论),您会发现您正在为Appcelerator Titanium开发模块。
从我可以收集的信息来看,Titanium不使用Xib文件或viewControllers(它使用'View Proxies'代替)。根据{{3}},在Titanium中使用Xib文件是一个非常复杂的过程:
您需要将XIB转换为NIB。最简单的方法是将XIB添加到本机项目,编译项目,然后拉出NIB。将其转储到模块的资产中,然后从模块代码中引用它。 ...请注意,我们通常不使用NIB,除非我们有来自第三方的强迫我们的东西。只是以命令性方式而不是声明性地创建视图更容易。
因为我只知道原生,而不是Titanium,我无法帮助你进一步解决这个问题。但我建议您遵循Titanium文档,不要将其与本机iOS开发混淆。
答案 3 :(得分:0)
首先在你的xxxmodule.m
中 -(void)startup
{
// this method is called when the module is first loaded
// you *must* call the superclass
[super startup];
yourViewController *controller = [[yourViewController alloc] init];
controller.delegate = self;
[[TiApp app] showModalController: controller animated: YES];
}