я реализовал приложение с горкой в стилизованном меню с помощью ECSlidingViewControllerUINavigationController подкласс не вызывая willShowViewController, когда ожидаются
В настоящее время у меня есть следующие настройки: первоначального View Controller подкласс ECSlidingViewController. Это управляет нажатием контроллера верхнего уровня (основной вид, отображаемый на экране) и нижним контроллером, который является меню.
Меню представляет собой подкласс контроллера таблицы, когда нажимается щелчок на новом контроллере верхнего уровня, который помещается в стек.
В поле previous question Я использую контроллер навигации (подклассы), который содержит один контроллер корневого представления. Каждый раз, когда выбирается строка, новый экземпляр навигационного контроллера загружается с помощью другого контроллера представления, старого dealloc'd. Например:
// Check if the settings view is currently displayed if it is just reset the top view else load it to the topviewcontroller.
UINavigationController *navController = (UINavigationController *)self.slidingViewController.topViewController;
UIViewController *VC = navController.topViewController;
if ([VC isKindOfClass:[MESSettingsViewController class]]) {
[self.slidingViewController resetTopView];
} else {
MESMainNavViewController *mainNavController = [[MESMainNavViewController alloc] initWithRootViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"SettingsVC"]];
__weak typeof(self) weakSelf = self;
[self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^{
CGRect frame = self.slidingViewController.topViewController.view.frame;
self.slidingViewController.topViewController = mainNavController;
self.slidingViewController.topViewController.view.frame = frame;
[weakSelf.slidingViewController resetTopViewWithAnimations:nil onComplete:^{
[weakSelf updateCurrentCell];
}];
}];
}
В настоящее время все работает нормально. У меня проблема с логином. Если пользователь выйдет из другого стека навигации, то будет нажата модально. Как только пользователь завершит успешный вход в систему, будет сделано уведомление. Это принимается Initial View Controller (сверху):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didLoginUser) name:@"LoginCompleteNotification" object:nil];
Способ затем обрабатывает нажатия пользователя на новый экземпляр подклассов контроллера навигации в вопросе, с домашнем контроллером как корень.
// If the view controller is not home send them to home
UINavigationController *navController = (UINavigationController *)self.topViewController;
UIViewController *VC = navController.topViewController;
if (![VC isKindOfClass:[MESHomeViewController class]]) {
UIStoryboard *storyboard;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
}
MESMainNavViewController *mainNavController = [[MESMainNavViewController alloc] initWithRootViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"HomeVC"]];
self.topViewController = mainNavController;
[self resetTopView];
}
Проблема, как представляется, со следующей частью:
MESMainNavViewController *mainNavController = [[MESMainNavViewController alloc] initWithRootViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"HomeVC"]];
self.topViewController = mainNavController;
Когда этот новый экземпляр навигационного контроллера создается метод делегата willShowViewController
не появляется называться? Я не могу понять, почему, он вызывает это, когда контроллер изменен через представление таблицы меню, и он использует тот же метод для создания любых мыслей?
Согласен, но поскольку новый экземпляр контроллера навигации создается, он нажимает контроллер. Когда система меню работает над кодом в вопросе, каждый раз, когда создается новый экземпляр и вызывается метод push. Он просто не отображается во второй части? – StuartM
Да, я дважды проверял, и кажется, что 'initWithRoot' толкает контроллер представления в стек, но я не уверен, что это нажатие вызовет методы делегатов. Еще одна вещь, которая приходит мне на ум, где вы устанавливаете делегат контроллера навигатора? – danypata
uinavigationcontroller - это собственный делегат, в настоящее время он установлен в viewDidLoad MESMainNavViewController – StuartM