使用带有正确选项卡的导航历史记录打开UIView

时间:2014-05-07 09:58:25

标签: ios objective-c xcode uiview tabs

我有一些具体的问题:

我的应用程序有4个选项卡,每个选项卡下都有独立的导航控制器。

我们说标签是:“最近”,“聊天列表”,“联系人”和“设置”。有时我需要从不同的标签和位置打开“ChatView”控制器,例如“Contacts”或“Recent”。 “ChatView”位于“聊天列表”选项卡下(根控制器为“ChatListView”),通常在选择一些现有会话后显示(在导航堆栈中,它类似于ChatListView - > ChatView)。

我想找到最好的方法,如何打开“ChatView”控制器切换到“聊天列表”选项卡并重置导航历史记录,这样当用户看到“聊天视图”时,后退按钮我们会转过他到“ChatListView”,但不是“联系”或他之前住过的其他地方。在这种情况下,模态视图不起作用,因为我需要显示标签栏和导航栏。

感谢您的建议!

更新

另请注意,我需要将一些数据传递给新打开的ChatView控制器。只是切换选中的标签栏也是不够的,因为我需要在其根控制器下打开View(ChatListView - > ChatView)

2 个答案:

答案 0 :(得分:2)

为此,您可以使用UITabbarController的setSelectedIndex属性。

答案 1 :(得分:1)

您可以使用selectedIndex属性隐式更改要显示的标签 试试这个:

NSInteger indexOfChatsTab = 1;
UINavigationController *chatsNavigationController = tabController.viewControllers[indexOfChatsTab];
[chatsNavigationController popToRootViewControllerAnimated:NO];
[chatsNavigationController pushViewController:selectedChatViewController animated:NO];
controller.selectedIndex = indexOfChatsTab;  

<强>更新
上面示例中的selectedChatViewController是视图控制器,它由用于显示新聊天的必要数据初始化 我的意思是在推送之前你需要像这样初始化它:

ChatViewController *selectedChatViewController = [[ChatViewController alloc] initWithChatData:chatData];