0

我正在尝试做一件非常简单的事情——我有一个用于整个应用程序的主 Xib 文件和另一个用于小视图的 Xib 文件。

我希望小视图(Xib 称为“additionalView.xib”)出现在第一个 Xib(“ViewController.xib”)中。

我已经成功地在“ViewController.m”中做到了,但我想要更多——我想从“additionalView.m”中做到这一点

我在“additionalView.m”中创建了一个名为“openView:”的方法,它看起来像这样:


-(IBAction)openView:(id)sender

{

  ViewController *vc = [[ViewController alloc] init];

  NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"additionalView" owner:self options:nil];    

  UIView *nibView = [nibObjects objectAtIndex:0];

  [vc.view addSubview:nibView];

}

正在调用该方法并且调试器正在读取行 - 但没有任何反应。没有崩溃 - 没有错误 - 没有大视图中的小视图。

这是为什么?

我知道最后一行可能是把所有事情都搞砸了,但我不知道如何正确表达。

4

3 回答 3

1

尝试

    [self.view addView:view.vc];

但是,我不确定您在这里查看的结构是什么。你说你的 -(IBAction)openView:(id)sender 在你的“additionalView.m”中,但它不是主视图控制器,对吗?您需要在主控制器中执行此操作,因此基本上将 openView: 方法移动到您的 ViewController.m

而且你通常需要一个单独的视图控制器为每个视图保持整洁和独立,所以额外的View.m 应该是 UIViewController 的一个实例,然后你可以从你的主视图中创建它,如下所示:

-(IBAction)openView:(id)sender

 {

 AdditionalView *vc = [[AdditionalView alloc] initWithNibName:@"additionalView"];


 [self.view vc.view];

 }
于 2012-09-12T14:50:10.853 回答
1

您的问题是ViewController *vc = [[ViewController alloc] init];创建了一个的视图控制器。因为它是新的,它不是管理显示的视图控制器层次结构中已经存在的那个。

您的方法需要访问现有的视图控制器。它如何做到这一点取决于您的应用程序的结构以及哪个对象具有对原始控制器对象的引用。

于 2012-09-12T14:50:23.677 回答
1

您有选择......首先,如果您只需要视图,则不需要创建视图控制器 vc。创建一个 uiview 并添加它。选项 1:按照上面的建议将 ref 传递给应用程序 vc,然后:[appVC.view addsubview:additionalView]

这会将它添加到 main.js 中。

在应用程序委托中使用视图控制器管理器/引用,您可以将其称为委托并将您的视图添加到当前显示视图。

希望这可以帮助

于 2012-09-14T04:44:27.970 回答