Question: I make a program that shows a table.

If people click the search I will add another view covering the original view. The original view is [BNUtilitiesQuick listnewcontroller];

```
[[BNUtilitiesQuick window] addSubview:[BNUtilitiesQuick searchController].view];

```

`[[BNUtilitiesQuick searchController] viewWillAppear:YES]` is indeed called. So it seems that UIView has a pointer to it's controller

However, the view that the `[[BNUtilitiesQuick listnewcontroller] viewWillDisappear]` is not called

Moreover, `[[BNUtilitiesQuick listnewcontroller] viewWillAppear]` is also not called even when the user has finished modifying search term with this code:

```
[self.view removeFromSuperview];

```

I think I may be missing something here. What exactly should I do anyway so IOs knows that the searchController.view will be covering listNewController?

Answer: 
This is NOT the right way to do it. If the searchController is a full screen controller you should present it modally using presentViewController or push it onto the navigation stack as @StuR suggested.

In case your search view covers only part of the listnewcontroller you should use the containment API in iOS5. 

Inside listnewcontroller (parent view controller) you would write:

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

```

For more in-depth information check out the WWDC 2011 session video "Implementing UIViewController Containment". Also watch "The Evolution of View Controllers on iOS" from 2012 because there are some changes and deprecations in iOS6.
```
ViewController *viewController = [[ViewController alloc] init];    
[self.navigationController pushViewController:viewController animated:YES];

```

I'd consider using pushViewController for adding a full screen view. addSubview is for views that don't cover the entire screen.