直接跳转到通常通过 TabBarViewController 中的选项卡之一访问的视图控制器
Jumping directly to a View controller that is usually accessed through one of the tabs in a TabBarViewController
这是我的应用程序的层次结构
- 有一个带有 4 个选项卡的 TabBarViewCOnyroller
- 每个选项卡显示一个 TableListViewOCnroller
- 当用户在 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 也可以通过编程方式进行操作。
在选项卡中获取导航控制器:
UINavigationController *navVC = myTabBarController.viewControllers[index];
像往常一样构建显示所有对话的根视图控制器。
UIViewController *listVC = // you build this somehow in your code already... do that
listVC.title = @"Chat";
像往常一样构建显示对话详细信息的视图控制器,并使用新收到的消息对其进行初始化。
UIViewController *detailVC = // you build this somehow in your code already... do that
替换导航视图控制器堆栈。
navVC.viewControllers = @[listVC];
[navVC pushViewController: detailVC animated:NO];
这是我的应用程序的层次结构
- 有一个带有 4 个选项卡的 TabBarViewCOnyroller
- 每个选项卡显示一个 TableListViewOCnroller
- 当用户在 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 也可以通过编程方式进行操作。
在选项卡中获取导航控制器:
UINavigationController *navVC = myTabBarController.viewControllers[index];
像往常一样构建显示所有对话的根视图控制器。
UIViewController *listVC = // you build this somehow in your code already... do that listVC.title = @"Chat";
像往常一样构建显示对话详细信息的视图控制器,并使用新收到的消息对其进行初始化。
UIViewController *detailVC = // you build this somehow in your code already... do that
替换导航视图控制器堆栈。
navVC.viewControllers = @[listVC]; [navVC pushViewController: detailVC animated:NO];