如何在另一个ViewController中将带有Xib的ViewController显示为SubView

时间:2016-01-09 10:13:27

标签: ios objective-c iphone xcode uiviewcontroller

我有一个Base Class我从Parent Class继承了我的Base Class

现在我有另一个ViewController XIB。我想要的只是在我的父类中显示这个XIB as一个视图。

我的ViewController使用XIB的名称是: SearchResultDisplayVC

此代码我使用我的基类将我的XIB显示为视图:

 - (void)showSearchResultsView
 {

SearchResultDisplayVC  *searchView =(SearchResultDisplayVC *)[[[NSBundle mainBundle] loadNibNamed:@"SearchResultDisplayVC" owner:[SearchResultDisplayVC class] options:nil] firstObject];


[self.view addSubview:searchView.view];

}

在我的Parent类中,我将其称为“

[self showSearchResultsView];

虽然我没有在编译时收到任何错误消息但是当我运行我的应用程序时它崩溃显示以下消息:

*** Terminating app due to uncaught exception
'NSUnknownKeyException',
reason: '[<SearchResultDisplayVC 0x1104bb380> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.'

4 个答案:

答案 0 :(得分:1)

您必须在父视图中添加为子视图控制器。

  SearchResultDisplayVC * searchView = [[SearchResultDisplayVC alloc] initWithNibName:@"SearchResultDisplayVC" bundle:nil];
    self.addChildViewController(searchView)

答案 1 :(得分:1)

请修改您的&#34; showSearchResultsView&#34;为:

- (void)showSearchResultsView
 {

UIView  *searchView =(SearchResultDisplayVC *)[[[NSBundle mainBundle] loadNibNamed:@"SearchResultDisplayVC" owner:[SearchResultDisplayVC class] options:nil] firstObject];


[self.view addSubview:searchView];

}

答案 2 :(得分:1)

您的SearchResultDisplayVC.xib文件存在问题我希望,检查文件所有者中的视图的插座连接是否应该设置为主视图以使任何视图控制器都能正常工作。如下所示,

enter image description here

所有视图控制器都期望&#34;视图&#34;要从nib文件定义和映射的对象。你有一个视图控制器笔尖,但没有名为&#34; view&#34;在里面。否则你写的任何代码都会很好用。

答案 3 :(得分:0)

经过这么多研究后,我找到了一种方法将其添加到window

现在我也可以使用viewDidLoad和所有其他方法。

- (void)showSearchResultsView
{

if(!self.searchDisplayView){

    self.searchDisplayView = [[SearchResultDisplayVC alloc] initWithNibName:@"SearchResultDisplayVC" bundle:nil];

    self.searchDisplayView.delegate = self;


    CGSize mainScreenSize = [[UIScreen mainScreen] bounds].size;

    self.searchDisplayView.view.frame = CGRectMake(0,
                                               0,
                                               mainScreenSize.width,
                                               mainScreenSize.height);
}

AppDelegate *delegate =  (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate.window addSubview:self.searchDisplayView.view];


 }