zoukankan      html  css  js  c++  java
  • iOS控制器如何随意的穿插跳跃

    主题思想:如A、B、C、D 四个视图控制器。

    想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A

    解决方法如下:

    1.假如此时在 A 控制器下,想要到 push 到 B, 可以这样写

    [self.navigationController pushViewController: B :YES];

    这时 
    self.navigationController.viewControllers 中按顺序含有 [A,B]

    2.此时已经到 B 控制器下了, 接下来是 push 到 D, 可以这样写

    [self.navigationController pushViewController: D :YES];

    这时self.navigationController.viewControllers中按顺序含有 [A,B,D],接下来很重要,如何想从 D pop 到 C, 看数组[A,B,D] 中压根就没有C 该如何pop 到C呢?

    这时就需要对这个数组进行修改,将C 加入进去

    于是 你会如下写:

    [self.navigationController.viewControllers addObject:C];

    发现报错,这是因为 self.navigationController.viewControllers 是不可变数组,没办法了,我们只好转换一下了:

    NSMutableArray*tempMarr =[NSMutableArrayarrayWithArray:self.navigationController.viewControllers];

    此时再加入C 就容易多了,咦,聪明的你会发现从 D pop C 不能直接将 C直接 addObject;

    当然,我会这样做:

    [tempMarr insertObject:C atIndex:tempMarr.count- 2];

    这时候 tempMarr 是这样的 [A,B,C,D],可是 要想 从 C pop 到 A ,数组中就不能有 B

    就需要 将 tempMarr 变成 [A,C,D] ,至于怎么变,你比我懂得多,

    懂得思考的同学会发现 这时的 self.navigationController.viewControllers 依然是 [A,B,D], 不用急,不用怕 navigationController 有这样一个方法, 可以搞定,如下:

    [self.navigationController setViewControllers:tempMarr animated:YES];

    有的同学会说,这不是直接把 B 替换 成 C 吗?

    看上去是这样,可是跳转的时机,时机,时机重要的事情说三遍,还有视图的切换,切换,切换。。。

    此时还在 B 控制器中,这些处理过程都是在 B 中处理的 , 也必须是 B 执行了 push 到 D 方法后,也就是说

    [self.navigationController pushViewController:D animated:YES];

    之后 进行的 数组处理;

    附加代码:

    在B 控制器中处理:

    -(void)pushTest {
    
        [self.navigationController pushViewController:D animated:YES];   
       NSMutableArray*tempMarr = [NSMutableArrayarrayWithArray : self.navigationController.viewControllers];    [tempMarr insertObject:C atIndex:tempMarr.count- 2];    [tempMarr removeObject:self]; //此时 的self 就是指 B ,因为在 B 中呢    [self.navigationController setViewControllers:tempMarr animated:YES]; }

  • 相关阅读:
    PAT顶级 1015 Letter-moving Game (35分)
    PAT顶级 1008 Airline Routes (35分)(有向图的强连通分量)
    PAT顶级 1025 Keep at Most 100 Characters (35分)
    PAT顶级 1027 Larry and Inversions (35分)(树状数组)
    PAT 顶级 1026 String of Colorful Beads (35分)(尺取法)
    PAT顶级 1009 Triple Inversions (35分)(树状数组)
    Codeforces 1283F DIY Garland
    Codeforces Round #438 A. Bark to Unlock
    Codeforces Round #437 E. Buy Low Sell High
    Codeforces Round #437 C. Ordering Pizza
  • 原文地址:https://www.cnblogs.com/ios988/p/7088581.html
Copyright © 2011-2022 走看看