UINavigation толкает новый корневой контроллер

Я пытаюсь вставить новый корневой контроллер в стек навигации, но использую боковое меню.

Мой делегат приложения имеет следующее:

    welcomeViewController = [[MyWelcomeViewController  alloc] initWithNibName:@"MyWelcomeViewController" bundle:nil];
navController = [[UINavigationController alloc] initWithRootViewController:welcomeViewController];
navController.navigationBarHidden = YES;

// Then we setup the reveal side view controller with the root view controller as the navigation controller
self.revealSideViewController = [[PPRevealSideViewController alloc] initWithRootViewController:navController];
[self.revealSideViewController setDirectionsToShowBounce:PPRevealSideDirectionNone];
[self.revealSideViewController setPanInteractionsWhenClosed:PPRevealSideInteractionContentView | PPRevealSideInteractionNavigationBar];

// Then we make the window root view controller the reveal side view controller
self.window.rootViewController = self.revealSideViewController;

После отображения контроллера приветствия пользователь входит в систему. После входа в систему следующий процесс снова запускается из App Delegate.

self.navController.navigationBarHidden = NO;
[self.navController setTitle:@"Home"];
[self.navController pushViewController:homeViewController animated:NO];

Затем у меня есть настройка контроллера вида сбоку, которая представляет собой табличное представление с настройкой пользовательских ячеек.

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

MyAccountViewController *accountViewController = [[MyAccountViewController alloc] init];
[self.navigationController setViewControllers:[NSArray arrayWithObject:accountViewController] animated:NO];

К сожалению, это ничего не делает. Если я добавляю код в делегат приложения и затем вызываю метод из контроллера табличного представления, он работает, но не из файла.m для самого табличного представления. Добавление журнала, который я вижу выше, запускается, просто ничего не делает.

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

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

введите описание изображения здесь

2 ответа

Добавьте что-то подобное в ваш AppDelegate.h:

#define XAppDelegate ((AppDelegate *)[[UIApplication sharedApplication] delegate])

Теперь вы можете получить доступ к любому iVar AppDelegate из любого файла.m в вашем проекте.

 MyAccountViewController *accountViewController = [[MyAccountViewController alloc] init];
 [XAppDelegate.navController pushViewController:accountViewController animated:NO];

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

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

Проверьте UINavigationController.h:

@interface UIViewController (UINavigationControllerItem)
@property(nonatomic,readonly,retain) UINavigationController *navigationController; // If this view controller has been pushed onto a navigation controller, return it.

Это значит, когда вы делаете myViewController.navigationController вы либо получите nil если myViewController не передается ни одному navController или ссылке navController myViewController вталкивается в.

Как я понимаю твой tableViewController не помещается в стек navController, это означает, что вы не можете получить navController с tableViewController.navigationController, Вместо этого вам нужно использовать anyViewControllerInTheStack.navigationController или если navController является rootViewController вашей keyWindow, от

((UINavigationController*)[[UIApplication sharedApplication] keyWindow].rootViewController)
Другие вопросы по тегам