2016-11-23 11 views
0

У меня есть UITableViewController (A), в котором перечислены некоторые города. Когда пользователь нажимает на строку, он переходит в UIPageViewController (B), который отправляет несколько страниц в UIViewControllers (X), в форме, отображая детали этого города, например. население, история .... Итак, когда пользователь консультируется с городом, он может прокручивать по горизонтали, чтобы проконсультироваться с предыдущим и соседними городами. На этом виде (X) есть кнопка «Показать карту». Если пользователь нажимает на эту кнопку, он попадает в UIViewController (C), отображая MKMapView, содержащий контакты ВСЕХ городов в списке «A». Итак, если пользователь консультируется с городом Бостон, то он нажимает кнопку «Показать карту», ​​он видит карту со всеми городами, затем он нажимает на нью-йоркский штырь, я возвращаю его в вид B (содержащий X) с APIКак перемещаться по 3 контроллерам контрольных точек

// viewControllers: A,B,C; we go from C to B 
[previousControllerB SetCity:NewYorkCityID]; 
[self.navigationController popViewControllerAnimated:YES]; 

Простой. И это работает хорошо.

В UITableViewController A (список) Я также добавил кнопку «Показать карту», ​​чтобы пользователь мог проконсультироваться с Картой, отображающей все столбцы города, без прохождения через контроллер B. Это работает. Находясь на карте, пользователь нажимает на булавку «Нью-Йорк», и я должен отображать View X в UIPageViewController B. Таким образом, пользователь может все же прокручивать и идти вперед и назад с городами. Здесь наступает проблема.

Если я вернусь к контроллеру вида A (список), тогда я нажимаю вид B (форму), я получаю плохую анимацию. Я не хочу видеть контроллер.

// viewControllers: A,C; we go from C to A then to B thanks to the segue GoToControllerB 
[self.navigationController popToViewController:controllerA animated:YES]; // even animated:NO gives bad results 
[controllerA performSegueWithIdentifier:@"GoToControllerB" sender:NewYorkCityID]; 

Если я создаю новый viewController B и нажимаю его, он не работает. Переходные блоки на 50%, я вижу черный полуэкран (правая сторона), тогда больше ничего не происходит.

// viewControllers: A,C; we instantiate B then we go from C to B 
ViewControllerB *controllerB = [self.storyboard instantiateViewControllerWithIdentifier:@"ControllerB"]; 
controllerB.view = controllerB.view; 
[controllerB SetCity:NewYorkCityID]; 
[self.navigationController pushViewController:controllerB animated:YES]; 

Я заметил, что эта проблема возникает только тогда, когда я создаю экземпляр и нажать UIPageViewController, и это никогда не произойдет, если я создаю экземпляр и нажать UIViewControllers. Итак, первый вопрос - как создать экземпляр и нажать UIPageViewController.

Затем, в этом последнем случае, поскольку я создаю представление B из контроллера C, я получаю неправильную последовательность контроллеров (A, C, B). Правая последовательность должна быть всегда

A,B,C (so: list, form, map) 
or 
A,C (so: list, map) 
    in this case, if the user from C (map), clicks on a city-pin and goes to B (form), the back button here must always bring him from B to A (the list) and not to the Map (C). 

Так что я подумал следующее: если пользователь нажмет на город-контактный на карте, во-первых, я экземпляр ViewController B (поэтому последовательность теперь A, C, B) то я удаляю контроллер C из self.navigationController.viewControllers. поэтому, когда пользователь находится на B и нажимает кнопку «Назад», он всегда идет к контроллеру A. Может ли это работать? Как это сделать? Любой пример кода? Спасибо.

ответ

0

Попробуйте это для поддержания вашей навигации последовательность ... A -> B -> C

1. go to ViewController C 

    ViewControllerc *objvcC = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerC"]; 
    [self.navigationController pushViewController:objvcC animated:YES]; 



2. then add ViewController to existing navigation stack 


    ViewControllerB *objViewControllerB = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerB"]; 
    NSMutableArray *existNavigationArray = [self.navigationController.viewControllers mutableCopy]; 
    [existNavigationArray insertObject:objViewControllerB atIndex:existNavigationArray.count -1]; 
    self.navigationController.viewControllers = existNavigationArray;