【问题标题】:How to navigate through 3 crossing view controllers如何浏览 3 个交叉视图控制器
【发布时间】: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


    【解决方案1】:

    试试这个来保持你的导航顺序...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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-18
      • 2011-05-18
      • 2011-09-03
      • 2015-02-07
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 2020-02-07
      相关资源
      最近更新 更多