Чтобы расширить свой код и, возможно, лучше понять, о чем я пытался прокомментировать выше.
UINavigationController* navigationController = [self navigationController];
UIViewController* parentViewControllerForNavigationController = [navigationController parentViewController];
Затем в вашем коде вы добавляете родительский ViewController к дочернему ViewController.
[navigationController pushViewController:parentViewControllerForNavigationController animated:YES];
Какой бы вы ни делали это, это вызовет серьезные проблемы. Я думаю, вы не совсем понимаете, как работает UINavigationController. Простое объяснение состоит в том, что это действительно просто итератор для списка (или очереди, если хотите) UIViewControllers (или подклассов UIViewControllers). Фактически, вы добавляете контроллер родительского представления в контроллер навигации, вызывая репликацию контроллера навигации.
Код:
[self.navigationController popViewControllerAnimated:YES];
Просто удаляет последний элемент из списка, он будет вызывать методы высвобождения и dealloc на UIViewController, который находится в конце стека UINavigationController. Это приведет к оживлению приложения к предыдущему представлению (поскольку аргумент animate является «YES»), вам вообще не нужно нажимать другое представление на стек навигации, и это похоже на то, что вы пытаетесь сделать ,
Однако, если вы, например, пытаетесь выполнить некоторые манипуляции навигации, такие как: У вас есть три контроллера вида, UIViewController A, B и C. The View Controller Корневой A. Нажимает В на навигационном контроллер затем выполнить некоторая функция в B и хотите, чтобы контроллер просмотра C был сдвинут в стек навигации, но когда вы нажмете назад в поле зрения C, вам будет предложено просмотреть A, а не View B, вы можете манипулировать массивом, возвращаемым вызовом [self navigationController] viewControllers] и удаление второго последнего объекта и изменение размера массива, а затем вызов [self navigationController] setViewControllers: «resizedArray»], но я бы использовал эту функцию в функции viewDidAppear в реализации контроллера C.
Я думаю, что вы можете сделать что-то ужасно неправильно здесь. С кодом "[self.navigationController pushViewController: self.navigationController.parentViewController animated: YES];" Это создаст циклический цикл с контроллером навигации, если вы добавите его родитель к себе. –
Извините, я, возможно, не был ясен. Этот код вызывается из другого представления, так сказать, детского представления. Это еще проблема? – LittlePeculiar
Да, это все равно будет проблемой. Скажем, вы добавляете свой контроллер навигации в свой экземпляр UIWindow в своем делете приложения, а затем вы нажимаете некоторые UIViewControllers на этот UINavigationController, когда вы вызываете «self.navigationController» в UIViewController, который вы ввели в стек навигации, это вернет экземпляр вашего UINavigationController, к которому вы добавили это представление. Затем вы вызываете parentViewController на свой UINavigationController, это в том, что я описал выше, будет UIWindow вашего App Delegate. –