QQ从联系人中点某个人进入个人资料界面,然后发消息,进入聊天界面,然后点左上角返回。直接回到消息界面,这个是怎么实现的?如果用 [self.navigationController popToRootViewControllerAnimated:YES]; 那应该也是返回到  联系人的界面。求解!?

解决方案 »

  1.   

    还有一个函数是popToViewController。 这个函数可以回退到指定的某个控制器
      

  2.   

    感觉你举的例子不太准确,QQ里联系人界面和消息界面是在一个TABBAR上的两个ViewController,只是tab不一样而已。类似你说的问题,可以结合
    self.navigationController.viewControllers属性
     [self.navigationController popToViewController:vc animated:YES];和这个方法达到目的。如下例子:
      [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
    index的值是你指定要返回栈里的哪个vc.还有一个方法也能实现
       [self.navigationController setViewControllers:array];
    根据实际需要,重新设置array。
      

  3.   

    附上viewControllers属性文档@property(nonatomic, copy) NSArray *viewControllers
    Discussion
    The root view controller is at index 0 in the array, the back view controller is at index n-2, and the top controller is at index n-1, where n is the number of items in the array.Assigning a new array of view controllers to this property is equivalent to calling the setViewControllers:animated: method with the animated parameter set to NO.
      

  4.   


    试过这个,但是没弄出来,不知道怎么搞

    需要你提供将要跳转到的控制器在控制器栈中的索引位置。通过self.navigationController.viewControllers 属性,可以得到所以已压入控制器栈中的控制器集合(返回的是一个NSArray)类型。那么你可以通过压栈的顺序找到你要跳转的控制器所在集合中的索引。通过这个索引位置就可以找到这个控制器,再结合popToViewController方法就可以实现你要效果。
    还有一个办法,就是重置这个栈中的所有控制器 self.navigationController.viewControllers =  .... ///重置后的控制器集合
      

  5.   

    好像楼上都没搞清楚,楼主问题的关键不是navigationController的返回,而是回到rootViewController之后,还要继续跳到和这个rootViewController同层次的tabbar的第一个viewController。不过tabBarViewcontroller好像没有在自身的viewController之间切换的方法吧,可能QQ那个看起来是一个UITabBarViewController,但可能是自定义的类,这样就可以想怎么切就怎么切了。可以在viewController返回的时候发个通知或者给rootVC传个值,在返回到rootVC的时候,让它继续跳转到tabBar的第一个ViewController
      

  6.   


    你的回答很详细,但如7楼说的,你的这方法没办法解决我的问题。 [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];这个只能跳回从第一个界面push过来的其中某个界面,而如果重新定义self.navigationController ,可以跳回我想要的界面,但是这个的结果就是联系人界面变成了消息界面。
      

  7.   

    楼主可以看下,在联系人界面点击某个联系人进入到个人资料详细页面,这时候左上角返回按钮显示返回,这个应该就是Nav的入栈出栈方法。当点击右下角发消息按钮,进入聊天界面时,左上角的返回按钮显示(返回)消息,点击之后返回到聊天消息界面,我认为这个返回按钮是定义好了的,就是返回到聊天Controller。
      

  8.   

    楼主 使用pop 只能 返回到  压入栈中的页面 ,如果是新的页面 需要push 或者如果是底部菜单根视图  直接调用 底部菜单的代理就可以吧