这是添加视图的正确方法吗?

时间:2012-06-26 09:35:30

标签: objective-c xcode ios5 xcode4.3

我制作一个显示表格的程序。

如果有人点击搜索,我会添加另一个覆盖原始视图的视图。原始视图是[BNUtilitiesQuick listnewcontroller];

[[BNUtilitiesQuick window] addSubview:[BNUtilitiesQuick searchController].view];
确实叫

[[BNUtilitiesQuick searchController] viewWillAppear:YES]。所以似乎UIView有一个指向它控制器的指针

但是,[[BNUtilitiesQuick listnewcontroller] viewWillDisappear]未被调用

的观点

此外,即使用户使用以下代码修改了搜索字词,也不会调用[[BNUtilitiesQuick listnewcontroller] viewWillAppear]

[self.view removeFromSuperview];

我想我可能会在这里遗漏一些东西。无论如何我应该做什么,以便IO知道searchController.view将覆盖listNewController?

3 个答案:

答案 0 :(得分:1)

这不是正确的方法。如果searchController是一个全屏控制器,你应该使用presentViewController以模态方式呈现它,或者按照@StuR的建议将其推送到导航堆栈。

如果您的搜索视图仅涵盖listnewcontroller的一部分,则应使用iOS5中的包含API。

在listnewcontroller(父视图控制器)中你会写:

[self addChildViewController:self.searchController];
[self.view addSubview:self.searchController.view];
[self.searchController didMoveToParentViewController:self];

有关更深入的信息,请查看WWDC 2011会话视频"实施UIViewController Containment"。另外观看" iOS上的视图控制器的演变"从2012年开始,因为iOS6中有一些更改和弃用。

答案 1 :(得分:0)

ViewController *viewController = [[ViewController alloc] init];    
[self.navigationController pushViewController:viewController animated:YES];

我会考虑使用pushViewController添加全屏视图。 addSubview适用于未覆盖整个屏幕的视图。

答案 2 :(得分:0)

如果你弹出或推送给定的viewController,我只会调用viewWillDisappear和viewWillAppear。你很简单,在它当前viewController里面(在顶部)添加一个子视图和它自己的viewController。正如StuR所说,如果你想解雇当前的ViewController,你应该使用:

BNUtilitiesQuick * searchController = [BNUtilitiesQuick alloc] init]; [self.navigationController pushViewController:searchController animated:YES];

您可以在此处详细了解ViewControllers:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457