У меня есть 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. Может ли это работать? Как это сделать? Любой пример кода? Спасибо.