Push view для навигации из модальной другой вкладки
Я довольно новичок в программировании на iOS и пытаюсь сделать что-то, что мне кажется простым, но я не могу найти четкого объяснения. Я пытаюсь разработать приложение с Xcode 6.3 и swift 1.2
У меня есть это:
Так что я в приложении на основе вкладок. Каждый вид вкладки находится внутри контроллера навигации. D - модальный запуск из C. Когда я нажимаю на кнопку внутри D, я хочу перейти к B. Это отлично. Но я также хотел бы отобразить верхнюю панель навигации с кнопкой возврата, указывающей на А. На данный момент, когда я пытался использовать push segue от D до B, B показывался как модальный, но не являющийся частью навигационного контроллера.
Как мне легко этого добиться? Должен ли я воссоздавать весь стек, создавая экземпляр каждого представления (A, а затем B) и помещая все в стек навигации?
Если вы знаете код для достижения этой цели в c-c, то это тоже хорошо для меня.
2 ответа
Когда я нажимаю на кнопку внутри D, я хочу перейти к B. Это отлично. Но я также хотел бы отобразить верхнюю панель навигации с кнопкой возврата, указывающей на А.
Вы можете вернуться к A, только если он действительно находится в стеке навигации. Таким образом, вам придется как-то поместить его в стек, прежде чем вы сможете достичь своей цели.
Как общий совет, если вы хотите, чтобы контроллер представления отображал панель навигации, вам нужно только убедиться, что он встроен в контроллер навигации. Когда вы представляете представление модально, оно по умолчанию не будет встроено в контроллер навигации. Итак, как вы сказали, D отображается модально из C, просто вставьте D в другой контроллер навигации и вместо того, чтобы делать D местом назначения для модального перехода, сделайте контроллер навигации местом назначения.
Обновить
Если вы хотите показать кнопку "Назад" в B, которая указывает на A, даже если B был показан модально от D, вам придется взломать ваш путь, потому что A нет в стеке навигации. Итак, по логике вещей, вам нужно убедиться, что A находится в стеке навигации непосредственно перед B. Я не думаю, что вы можете сделать это просто с segues от IB, а использовать код и создать экземпляр UINavigationController
сам:
- (void)showBModallyWithBackButtonToA
{
A *a = [[A alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:a];
B *b = [[B alloc] init];
[nav pushViewController:b animated:NO];
[self presentViewController:nav animated:YES completion:nil];
}
Этот код должен выполняться из D, если я правильно понимаю ваши настройки.
Вот решение от nburk, конвертированное в быстрый с использованием раскадровки:
let a = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("aIdentifier") as! ATableViewController
let nav = UINavigationController(rootViewController: a)
let b = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("bIdentifier") as! BViewController
// b parameters here
// b.parameter1 = variable
nav.pushViewController(b, animated:false)
self.presentViewController(nav, animated:true, completion:nil)
Где aIdentifier и bIdentifier - это идентификатор, который вы устанавливаете в редакторе раскадровки для каждого представления, а ATableViewController и BViewController - их соответствующие классы ViewController.