Как удалить несколько многих представлений из супервизора

#objective-c #uiview #viewdidload

#objective-c #uiview #viewdidload

Вопрос:

У меня есть некоторый uiview, один вызывает другой таким образом:

Из первого пользовательского интерфейса:

 MyViewController *contr1 = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[self.view addSubview:contr1.view];
  

Из второго пользовательского интерфейса:

 MyViewController2 *contr2 = [[MyViewController2 alloc] initWithNibName:@"MyViewController2" bundle:nil];
[self.view addSubview:contr2.view];
  

теперь в третьем uiview я хочу вернуться к первому его обновлению (вызывая viewDidLoad ). как я могу сделать?

Ответ №1:

Прежде всего — вы делаете это неправильно.

Поскольку вы используете контроллеры представления, представьте их модально или нажмите их:

 MyViewController2 *contr2 = [[MyViewController2 alloc] initWithNibName:@"MyViewController2" bundle:nil];
[self presentModalViewController:contr2];
  

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

 - (IBAction)doHomePage:(id)sender {
  MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
  [appDelegate.navigationController.rootViewController dismissModalViewControllerAnimated:YES];
}
  

Также вместо viewDidLoad: вы можете захотеть использовать viewWillAppear: или viewDidAppear: .

Заранее извините, если в коде есть какие-то опечатки, так как я написал его вручную.

Комментарии:

1. не волнуйтесь.. я попробую это! большое вам спасибо! 🙂 итак, каждый раз, когда мне нужно добавить представление, я должен делать так, как вы мне предлагаете, верно? 🙂

2. в этой строке: MultiViewcontroller * multi = [[MultiViewcontroller alloc] initWithNibName:@»MultiViewController» bundle:nil]; [self presentModalViewController: multi]; в последней строке он выдает мне предупреждение: Метод экземпляра -presentModalViewController file://localhost/Users/jackturkey/Desktop/IOSTrovaChiavi/TrovaChiavi/TrovaChiavi/TrovaChiaviViewController.m : предупреждение: Семантическая проблема: метод экземпляра ‘-presentModalViewController:’ не найден (возвращаемый тип по умолчанию равен ‘id’).. Почему?

3. поскольку вам нужно добавить анимированные: ДА]; Я сказал, что написал их вручную, xCode должен был предоставить автозаполнение для вас. [self presentModalViewController: anotherViewController анимированный: ДА]; Также обратите внимание на то, что говорится в предупреждениях, это жизненно важно для правильной работы вашего приложения.

4. ДА. Представляя контроллер модального представления или помещая контроллер представления в стек контроллеров представления навигационного контроллера, вы можете анимировать переходы или мгновенно перерисовывать содержимое экрана. Посмотрите на свойство modalTransitionStyle подкласса UIViewController для разных анимаций модального перехода.

5. AppDelegate — это привязка между iOS и вашим приложением. Он содержит различные обратные вызовы, уведомляющие приложение о некоторых конкретных действиях устройства. Например, он уведомляет ваше приложение о том, что оно собирается завершиться или что оно собирается перейти в фоновый режим / режим переднего плана. Что вам нужно сделать в вашей ситуации, так это получить контроллер, который вы хотите отобразить на экране, и попросить его отключить все модальные контроллеры, которые у него есть. В вашем случае это ваш корневой контроллер представления. Надеюсь, это имеет смысл для вас, потому что, если нет, вам лучше прочитать о некоторых базовых концепциях разработки приложений.