我有一个UITableViewController(A)列出了一些城市。 当用户点击一行时,他前往UIPageViewController(B),该UIPageViewController(B)在UIViewControllers(X)中调度多个页面,该表格显示该城市的详细信息,例如:人口,历史...... 因此,当用户咨询城市时,他可以水平滑动以咨询前一个和下一个城市。 在这个视图(X)上有一个"显示地图"按钮。如果用户点击此按钮,他将被带到UIViewController(C),显示包含列表中所有城市的引脚的MKMapView" A"。 因此,如果用户正在咨询波士顿市,那么他点击了显示地图"按钮,他看到所有城市的地图,然后他点击纽约针,我带他回到视图B(包含X)与API
// viewControllers: A,B,C; we go from C to B
[previousControllerB SetCity:NewYorkCityID];
[self.navigationController popViewControllerAnimated:YES];
简单。它运作良好。
在UITableViewController A(列表)上我放了一个"显示地图"按钮也是如此,因此用户可以查看显示所有城市针脚的地图,而无需通过控制器B.它可以工作。 在地图上,用户点击了#34;纽约"我必须在UIPageViewController B中显示View X.因此用户仍然可以滑动并向城市前进和后退。 麻烦就来了。
如果我回到视图控制器A(列表)然后我按下视图B(窗体),我得到一个坏动画。我不想看到控制器A.
// 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。
然后,在最新的情况下,由于我从控制器C实例化视图B,我得到一个错误的控制器序列(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).
所以我想到了以下内容:如果用户点击地图上的city-pin,首先我实例化viewController B(所以序列现在是A,C,B),然后我从self中删除控制器C. navigationController.viewControllers。 因此,当用户在B上并点击后退按钮时,他总是转到A控制器。 这可行吗?怎么做?任何示例代码?谢谢。
答案 0 :(得分: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;