несколько ViewControllers (containerView? childView? экземпляр viewController?) - PullRequest
3 голосов
/ 27 марта 2012

Мне нужно добавить новый вид (с ViewController) поверх другого. Пользователь некоторое время взаимодействует с этим новым представлением, а затем я хочу удалить его. В более старой версии Xcode я смог добавить его в качестве подпредставления. Теперь я получаю ошибку EXC_BAD_ACCESS.

Я не хочу, чтобы добавленный вид был модальным. Мне нужно увидеть исходный фон через добавленный вид. Я много читал о новых пользовательских контейнерах, addChildView и presentView. Я не вижу, чтобы какой-либо из них был ясным ответом.

Вот старый код, который работал раньше - Действие в главном ViewController:

-(IBAction)showWhiteView:(id)sender
{
    WhiteViewController *whiteView = [[WhiteViewController alloc] initWithNibName:@"WhiteViewController" bundle:nil];
    [self.view addSubview:whiteView.view];
}  

Действие в добавленном представлении для его удаления:

-(IBAction)removeView:(id)sender
{
    [self.view removeFromSuperview];
}

Спасибо за вашу помощь.

Может быть, ВИЗУАЛЬНЫЙ ПРИМЕР поможет объяснить - скажем, основной вид - это океан, с анимированными волнами и движущимися облаками, контролируемыми контроллером MainView. Пользователь что-то нажимает, и я хочу добавить лодку (WhiteView) к основному виду. Я хочу, чтобы пользователь взаимодействовал с лодкой: нажмите здесь, когда парус открывается, нажмите там, где опускаются якоря, и т. Д. (Нужны методы WhiteViewController). В конце концов, я хочу удалить лодку из океана.

Спасибо, Тим - Добавлен новый код:

-(IBAction)showWhiteView:(id)sender
{   WhiteViewController *whiteView = [[WhiteViewController alloc] initWithNibName:@"WhiteViewController" bundle:nil];
    [self addChildViewController:whiteView];
    [whiteView didMoveToParentViewController:self];
    [self.view addSubview:whiteView.view];   }

и в WhiteViewController для удаления:

-(IBAction)removeView:(id)sender
{    [self.view removeFromSuperview];
     [self removeFromParentViewController];    }

Я с нетерпением жду дальнейших предложений по улучшению этого положения. Спасибо всем!

Ответы [ 2 ]

5 голосов
/ 27 марта 2012

См. Ответ здесь относительно содержания UIViewController.Я собрал пример проекта по содержанию UIViewController здесь: http://github.com/toolmanGitHub/stackedViewControllers

Надеюсь, это поможет .`

Тим

1 голос
/ 27 марта 2012

Я понял из вашего вопроса, что вы хотите добавить подпредставление к суперпредставлению, и которое должно быть взаимодействующим с пользователем, верно?

, чтобы вы могли сделать это, выполнив следующие действия.

1) Добавьте новый вид в xib.
2) сделайте его непрозрачным, установите альфа-значение меньше единицы (но не ноль, зависит от вас, насколько вы хотите прозрачность)
3)добавьте над ним компоненты, и внутри -(IBAction)showWhiteView:(id)sender (в вашем случае) следующий код

whiteView.frame = CGRectMake(55, 60, 200, 200);
[UIView beginAnimations:@"" context:nil];
[UIView setAnimationDuration:.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
[self.view addSubview:whiteView];

И для его удаления сделайте следующее

-(IBAction)removeView:(id)sender
  {
     [whiteView removeFromSuperview];
  }

Не забудьтеподключите только что добавленный вид.

попробуйте.

...