0

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

如果人们点击搜索,我将添加另一个覆盖原始视图的视图。原来的视图是[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?

4

3 回答 3

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 遏制”。还要观看 2012 年的“iOS 上的视图控制器的演变”,因为 iOS6 中有一些更改和弃用。

于 2012-06-26T09:55:05.760 回答
0
ViewController *viewController = [[ViewController alloc] init];    
[self.navigationController pushViewController:viewController animated:YES];

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

于 2012-06-26T09:43:01.993 回答
0

viewWillDisappear 和 viewWillAppear 只有在你弹出或推送给定的 viewController 时才会被调用。您很容易在当前视图控制器的内部(顶部)添加一个带有它自己的视图控制器的子视图。正如 StuR 所说,如果你想关闭当前的 ViewController,你应该使用:

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

您可以在此处阅读有关 ViewController 的更多信息:http: //developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457

于 2012-06-26T09:59:08.927 回答