iOS微信在通讯录里随意点击一个联系人发消息,点击返回则返回至微信首页的消息列表,咋实现无缝结合的

你再多点几遍发送消息,你会发现,它首页消息列表一闪而过然后才是跳转到给联系人发消息。意味着什么好好想想。剩下的,自己加油吧!
■网友
重新set一下navigationCtroller的viewControllers属性就可以了
■网友
【iOS微信在通讯录里随意点击一个联系人发消息,点击返回则返回至微信首页的消息列表,咋实现无缝结合的】 重写了返回按钮的点击事件,进行了导航栏的返回重定向

■网友
简单的理解一下原理就可以了首先NavigationController有个属性叫viewControllers就是当前NVC里堆栈的所有controllers,而每一次pop都会从最前的那个pop到上一个。所以,你只要把viewContoller里面的vc保持第一个不变的情况下,稍微增减排序就可以无缝做到pop的动作。例如viewContollers里面有@, 做跳转到v3,想v3直接pop到v1。就可以在完成push v3的动作时,把NVC的viewCntollers拿出来,把v2删了。然后再赋值回给NVC,就会变成@, 这时候,只要pop,就可以从v3无缝pop到v1。代码如下: ; NSMutableArray *viewControlers2 = ;; self.navigationController.viewControllers = viewControlers2; // 然后直接在v3中实现pop动作,就可以无缝去到v1了。 // 而微信的rootController是一个tabarController,所以在完成上面动作的时候还需要: UITabBarController *tabbarController = self.navigationController.viewControllers; tabbarController.selectedIndex = 0; // 让tabbarCV先选中第一个选项
■网友
写了一个小demo,代码大致如下:
/** * UITabBarController有两个tab * 分别设置了两个NavigationController,其RootViewController名字分别为FirstViewController和SecondViewController * pushButtonPressed:为SecondViewController里一个按钮的响应方法 */- (IBAction)pushButtonPressed:(UIButton *)sender { // 1.同时创建两个相同的controller // @note 这里应该可以考虑复用。创建两个相同的controller浪费内存,如果controller里有io操作,也会浪费流量和阻塞线程,可以作为优化点 SecondViewController *secondController = init]; SecondViewController *secondController2 = init]; secondController.hidesBottomBarWhenPushed = YES; secondController2.hidesBottomBarWhenPushed = YES; // 2.拿到第0个navigation和第1个导航navigation,同时push // @brief 实际情况比这里复杂,应该要把第0个导航pop到root,清空一切搜索或者present状态等等,做成初始化的状态 NSArray *viewControllers = self.tabBarController.viewControllers; UINavigationController *firstNavigationController = viewControllers; UINavigationController *secondNavigationController = viewControllers; ; ; // 3.push动画完成后立即切换到第0个tab,并且把第1个navigation给pop到root // @brief 0.4秒是预估时间,试了下即使立即点返回按钮也能返回到第0个tab dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ ; self.tabBarController.selectedIndex = 0; }); // 4.如果可以接受瞬间的闪烁效果,其实可以先把tab切换到第0个,然后pushViewController,代码大致如下: /*; self.tabBarController.selectedIndex = 0; ;*/}代码不合理的地方,欢迎指出讨论~
----------------------------------
截图版:


推荐阅读