我有一些具体的问题:
我的应用程序有4个选项卡,每个选项卡下都有独立的导航控制器。
假设标签为:“最近”,“聊天列表”,“联系人”和“设置”。有时我需要从不同的选项卡和位置(例如“联系人”或“最近”)打开“ ChatView”控制器。 “ ChatView”位于“聊天列表”选项卡下(根控制器为“ ChatListView”),通常在选择一些现有对话后显示(在导航堆栈中,它类似于ChatListView-> ChatView)。
我想找到最好的方法,即如何通过切换到“聊天列表”标签并重置导航历史记录来打开“ ChatView”控制器,因此当用户看到“ ChatView”时,返回按钮会将其转到“ ChatListView”,但不可以“联系”或他以前住过的其他地方。在这种情况下,模式视图将不起作用,因为我需要同时显示选项卡栏和导航栏。
感谢您的建议!
更新资料
另外请注意,我需要将一些数据传递给新打开的ChatView控制器。仅切换选定的选项卡栏也是不够的,因为我需要在其根控制器下打开View(ChatListView-> ChatView)
最佳答案
您可以使用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];
关于ios - 使用正确的标签打开带有导航历史的UIView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23514584/