#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 и вашим приложением. Он содержит различные обратные вызовы, уведомляющие приложение о некоторых конкретных действиях устройства. Например, он уведомляет ваше приложение о том, что оно собирается завершиться или что оно собирается перейти в фоновый режим / режим переднего плана. Что вам нужно сделать в вашей ситуации, так это получить контроллер, который вы хотите отобразить на экране, и попросить его отключить все модальные контроллеры, которые у него есть. В вашем случае это ваш корневой контроллер представления. Надеюсь, это имеет смысл для вас, потому что, если нет, вам лучше прочитать о некоторых базовых концепциях разработки приложений.