У меня есть HomeView и HomeDropDownView.Делегат iOS не нажимает и не представляет вид
HomeDropDownView показан как раскрывающийся вид на HomeView.
HomeView является делегатом HomeDropDownView.
Когда я делаю действие в HomeDropDownView, я хочу вызвать метод делегата в HomeView и предоставить этому методу делегата третий контроллер представлений TestViewController с его навигационного контроллера.
Если я пытаюсь запустить TestViewController с в любом месте в классе, он отлично работает - кроме метода делегата.
В HomeDropDownView есть анимация, но при вызове метода делегата в процессе выполнения не создается диспетчер представлений. И в том случае, если я использую это, анимация не срабатывает; есть только изменение размера без анимации.
Инициатор TestViewController вызывается так же, как viewDidLoad, но не viewWillAppear, и доза просмотра не появляется.
Код:
HomeDropDownView
- (void)finalAction {
...
[self callDelegateAction];
...
- (void)calldelegateAction {
if ([self.delegate respondsToSelector:@selector(launchTestView)]) {
[self.delegate launchTestView];
} else {
DLog(@"Error out to the user.");
}
}
HomeView
- (void)launchTestView {
//[self listSubviewsOfView:self.parentViewController.view];
NSLog(@"delegate method | self: %@", self);
TestViewController *tvc = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
//[self.navigationController presentViewController:tvc animated:YES completion:nil];
//[self.view.window.rootViewController presentViewController:tvc animated:YES completion:nil];
//[self.navigationController pushViewController:tvc animated:YES];
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appdelegate.tabBarController.navigationController presentViewController:tvc animated:YES completion:^() {
NSLog(@"Done!");
}];
}
Ни один из вышеперечисленных подходов работы. Но если я поместил тот же самый код в viewDidAppear или поместил его в метод действия кнопки, он будет работать нормально. Во время вызова метода метода делегата HomeView и всех подзонов, включая навигационный контроллер, похоже, есть. Это находится в проекте на основе tabcontroller, но я думаю, что любой из вышеперечисленных способов является приемлемым способом вызова контроллера nav.
Что мне не хватает? Почему мой метод делегата не хочет нажимать/представлять диспетчер представлений на контроллере NavView HomeView? Вероятно, это то, что мне не хватает, но я не могу найти причину в Apple Docs или любом другом потоке. Спасибо за помощь!
Is HomeDropDownПросмотреть modal view controller? Если да, вы пытаетесь показать модальный вид, даже если у вас уже есть другое модальное представление. Это не верно. – Kedar
Пожалуйста, не используйте appdelegate для представления контроллеров представления, это очень плохая практика. – Jeremie
Kedar: Нет, это точка зрения, которая всегда «там» и изменяется при отображении/скрытии. – addzo