【发布时间】:2016-11-23 00:04:33
【问题描述】:
我有一个 UITableViewController (A) 列出了一些城市。 当用户点击一行时,他会转到 UIPageViewController (B),它在 UIViewControllers (X) 中调度多个页面,该表单显示该城市的详细信息,例如人口、历史…… 所以当用户在查询一个城市时,他可以水平滑动来查询上一个和下一个城市。 在此视图 (X) 上有一个“显示地图”按钮。如果用户点击此按钮,他将被带到 UIViewController (C),显示包含列表“A”中所有城市的引脚的 MKMapView。 所以如果用户正在咨询城市波士顿,然后他点击“显示地图”按钮,他看到所有城市的地图,然后他点击纽约大头针,我把他带回视图 B(包含 X ) 使用 API
// viewControllers: A,B,C; we go from C to B
[previousControllerB SetCity:NewYorkCityID];
[self.navigationController popViewControllerAnimated:YES];
简单。而且效果很好。
在 UITableViewController A(列表)上,我也放置了一个“显示地图”按钮,因此用户可以在不通过控制器 B 的情况下查看显示所有城市引脚的地图。它可以工作。 在地图上,用户单击“纽约”图钉,我必须在 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).
所以我想到了以下几点:如果用户单击地图上的城市图钉,首先我实例化 viewController B(所以现在的顺序是 A、C、B)然后我从 self.xml 中删除控制器 C。导航控制器.viewControllers。 因此,当用户在 B 上并点击后退按钮时,他总是会转到 A 控制器。 这能行吗?怎么做?任何示例代码?谢谢。
【问题讨论】:
标签: ios instantiation uipageviewcontroller