请问微信中点击通讯录,然后选择一个好友,然后点击发送消息之后,返回的还是主界面?这个功能是怎么实现的呢?看他点击发送消失之后是pop到了通讯录的好友列表,然后在push进去的,我的实现方式是先popToRoot 然后在切换tabbar选中,感觉这样看起来并不丝滑~求助
光阴似箭催人老,日月如移越少年。
微信及很多IM app 為了防止聊天界面多開、深層嵌套,也為了統一操作習慣,都限定了“凡是進聊天界面,都統一從會話列表進”,我之前做的幾款app 在對打開聊天介面的處理上也是這樣。 有一個用於開啟聊天介面的公共方法,可以在任意介面呼叫。或定義一個聊天介面的路由。 例如:+ [ChatViewController openWithUser:(User *)user];
+ [ChatViewController openWithUser:(User *)user];
以微信的 app 結構為例,上有導航下有 tabBar ,只有一個會話清單。打開聊天介面的邏輯大概是這樣:
if (currentChatViewController && currentChatViewController.user.userId == user.userId) { // 如果这个人的聊天界面已经打开了 if (conversationListViewController.navigationController.viewControllers.count > 2) { // 不在聊天界面:比如在查看资料界面,就返回到聊天界面 [conversationListViewController popToViewController:currentChatViewController animated:YES]; } } else { // 退出当前的聊天界面,animated: NO if (conversationListViewController.navigationController.viewControllers.count > 1) { [conversationListViewController.navigationController popToRootViewControllerAnimated:NO]; } ChatViewController *chatVC = [[ChatViewController alloc] initWithUser:user]; [conversationListViewController.navigationController pushViewController:chatVC animated:YES]; } tabBarViewController.selectedIndex = 0;
取得根控制器、會話列表、目前聊天窗口,可以使用全域變量,或用程式碼查:
UITabBarController *tabBarViewController = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController; UIViewController *conversationListViewController = tabBarViewController.viewControllers.firstObject; ChatViewController *currentChatViewController = (ChatViewController *)(conversationListViewController.navigationController.viewControllers.count > 1 ? conversationListViewController.navigationController.viewControllers[1] : nil);
微信及很多IM app 為了防止聊天界面多開、深層嵌套,也為了統一操作習慣,都限定了“凡是進聊天界面,都統一從會話列表進”,我之前做的幾款app 在對打開聊天介面的處理上也是這樣。
有一個用於開啟聊天介面的公共方法,可以在任意介面呼叫。或定義一個聊天介面的路由。
例如:
+ [ChatViewController openWithUser:(User *)user];
以微信的 app 結構為例,上有導航下有 tabBar ,只有一個會話清單。打開聊天介面的邏輯大概是這樣:
取得根控制器、會話列表、目前聊天窗口,可以使用全域變量,或用程式碼查: