直接跳转到通常通过 TabBarViewController 中的选项卡之一访问的视图控制器

Jumping directly to a View controller that is usually accessed through one of the tabs in a TabBarViewController

这是我的应用程序的层次结构

  1. 有一个带有 4 个选项卡的 TabBarViewCOnyroller
  2. 每个选项卡显示一个 TableListViewOCnroller
  3. 当用户在 TableListViewCONtrilelrs 中选择一行时,根据哪个选项卡和哪一行推送不同的视图控制器。每个都有一个导航后退按钮,可以将 UI 带回 Tab-Bar 视图控制器

例如聊天选项卡按时间戳排序顺序显示聊天列表。显示与每个远端交换中的最后一次聊天。当用户选择某一行时,它将进入一个视图控制器,该视图控制器显示用户和与该行连接的远端之间的所有消息。

当我收到来自特定远端的带有消息的推送通知,并且用户选择它时,我希望应用程序直接转移到视图控制器,其中包含远端的所有消息并返回导航按钮指向 "Chat tab"。我知道如何以编程方式显示消息显示视图控制器,但我不知道如何以允许用户导航回聊天选项卡的方式嵌入它。

谁能给我一些示例代码来说明如何实现这一点。很抱歉要求提供现成的解决方案。太多基础框架的东西需要掌握,所以没时间掌握 UI 东西!

编辑我正在使用的代码

    NSInteger index = 1 ;// the index of the chat tab
    UITabBarController *myTabBarController = (UITabBarController *)self.window.rootViewController;
    myTabBarController.selectedIndex = index;
    UINavigationController *navVC = myTabBarController.viewControllers[index];

    ChatListTableViewController *listVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"chatlistview"];
    listVC.navigationItem.backBarButtonItem.title = @"Chats";

    MessageDisplayViewController *detailVC = [[MessageDisplayViewController alloc] init];
    //Initialize all the variables needed by JSQMessage class
    detailVC.hidesBottomBarWhenPushed = YES;
    detailVC.title = detailVC.recipient = userInfo[@"sender"];
    //To Do Map farEndID to farEndNickName using unique user table
    detailVC.recipientNickName= detailVC.recipient ;
    detailVC.managedObjectContext=self.managedObjectContext ;
    detailVC.senderDisplayName=[[NSUserDefaults standardUserDefaults] stringForKey:@"NickName"];
    detailVC.senderId=[[NSUserDefaults standardUserDefaults] stringForKey:@"UserID"];

    //navVC.viewControllers = @[listVC, detailVC];
    navVC.viewControllers = @[listVC];
    [navVC pushViewController: detailVC animated:NO];

要将标签栏控制器更改为标签,请使用

NSInteger index = // the index of the chat tab
myTabBarController.selectedIndex = index;

该选项卡上的 UINavigationController 也可以通过编程方式进行操作。

  1. 在选项卡中获取导航控制器:

    UINavigationController *navVC = myTabBarController.viewControllers[index];
    
  2. 像往常一样构建显示所有对话的根视图控制器。

    UIViewController *listVC = // you build this somehow in your code already... do that
    listVC.title = @"Chat";
    
  3. 像往常一样构建显示对话详细信息的视图控制器,并使用新收到的消息对其进行初始化。

    UIViewController *detailVC = // you build this somehow in your code already... do that
    
  4. 替换导航视图控制器堆栈。

    navVC.viewControllers = @[listVC];
    [navVC pushViewController: detailVC animated:NO];