我正在尝试做一件非常简单的事情 - 我为整个应用程序提供了一个主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];
}
正在调用该方法并且调试器正在读取行 - 但没有任何反应。 没有崩溃 - 没有错误 - 在更大的视野中没有小视图。
为什么?
我知道最后一行可能是什么 拧紧所有东西,但我不知道如何正确使用它。
答案 0 :(得分:1)
尝试
[self.view addView:view.vc];
但是,我不确定你在这里查看结构是什么。你说你的 - (IBAction)openView:(id)发送者在你的“additionalView.m”中,但它不是主视图控制器,对吗?您需要在主控制器中执行此操作,因此基本上将openView:方法移动到ViewController.m
并且您通常需要为每个视图使用单独的视图控制器来保持整洁和分离,因此additionalView.m应该是UIViewController的一个实例,然后您可以从主视图创建,如下所示:
-(IBAction)openView:(id)sender
{
AdditionalView *vc = [[AdditionalView alloc] initWithNibName:@"additionalView"];
[self.view vc.view];
}
答案 1 :(得分:1)
您的问题是ViewController *vc = [[ViewController alloc] init];
创建了一个新视图控制器。因为它是新的,所以它不是管理显示的视图控制器层次结构中已存在的那个。
您的方法需要访问现有的视图控制器。它是如何做的取决于您的应用程序的结构以及哪个对象具有对原始控制器对象的引用。
答案 2 :(得分:1)
您有选项...首先,如果您只需要视图,则无需创建视图控制器vc。创建一个uiview并添加它。 选项1:按照上面的建议将ref传递给app vc然后: [appVC.view addsubview:additionalView]
这会将它添加到main。
在app delegate中使用视图控制器管理器/ ref,您可以将其视为委托,并将您的视图添加到当前显示视图。
希望这有帮助