将视图控制器更改为选项卡栏控制器
Changing view controller to tab bar controller
我有一个基于选项卡的应用程序,其中包含 2 个选项卡(HomeViewController 和 SettingsViewController)。
在 SettingsViewController 上,我有一个按钮,可以将用户带到第三个视图 (ChangeSomeSettingController)。
在第三个视图中,我有一个具有此功能的 TableView
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
...
let settingsViewController = self.storyboard!.instantiateViewControllerWithIdentifier("SettingsViewController") as! SettingsViewController
self.presentViewController(settingsViewController, animated:true, completion:nil)
}
这会将用户移回 SettingsViewController。但是,我无法让标签栏显示在屏幕底部,就像我第一次加载应用程序时那样。
如何返回到 SettingsViewController 并使选项卡保持在屏幕底部?
这一行:
self.presentViewController(settingsViewController, animated:true, completion:nil)
不会将用户移回设置 VC,它会显示一个新的设置实例 VC,当然会覆盖选项卡栏。
您需要在 select 选项卡时按下 VC,因此如果您想返回,则无需再次显示它们。
如果您不需要导航控制器,那么您应该显示标签栏控制器而不是设置 vc。
在ChangeSomeSettingController中,如果你从SettingViewController中pushViewController,你应该调用
navigationController?.popViewControllerAnimated(true)
或者如果你想返回到 SettingViewController
//back to root view controller from navigation
navigationController?.popToRootViewControllerAnimated(true)
// you should call to tabbar view controller
UITabbarViewController *tabbarVC = (UITabbarViewController *)[UIApplication sharedApplication] delegate].window.rootViewController;
[tabBarController setSelectedIndex:1]; // 1 is index of SettingViewController
这是我的示例,对于您的问题,您可以修改以适应您的要求。希望对你有所帮助。
首先,presentViewController:animated:completion:
将模态呈现 SettingsViewController
。你需要的是一个 UINavigationController 流程。
1) 添加创建 UITabBarController
2) Select 将具有 UINavigationControler
流的项目 (UIViewController)。
3) 删除它
4) 添加UITableViewController
5) 添加新的 UITableViewController
到 UITabBarController
6) Select UITableViewController
并嵌入(编辑器 > 嵌入 > 导航控制器)到导航控制器。
7) 添加一个UIViewController
并在UITableViewController
和UIViewController
之间添加一个segue(Show)
8) 结果最终结果应该是这样的:
我有一个基于选项卡的应用程序,其中包含 2 个选项卡(HomeViewController 和 SettingsViewController)。
在 SettingsViewController 上,我有一个按钮,可以将用户带到第三个视图 (ChangeSomeSettingController)。
在第三个视图中,我有一个具有此功能的 TableView
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
...
let settingsViewController = self.storyboard!.instantiateViewControllerWithIdentifier("SettingsViewController") as! SettingsViewController
self.presentViewController(settingsViewController, animated:true, completion:nil)
}
这会将用户移回 SettingsViewController。但是,我无法让标签栏显示在屏幕底部,就像我第一次加载应用程序时那样。
如何返回到 SettingsViewController 并使选项卡保持在屏幕底部?
这一行:
self.presentViewController(settingsViewController, animated:true, completion:nil)
不会将用户移回设置 VC,它会显示一个新的设置实例 VC,当然会覆盖选项卡栏。
您需要在 select 选项卡时按下 VC,因此如果您想返回,则无需再次显示它们。
如果您不需要导航控制器,那么您应该显示标签栏控制器而不是设置 vc。
在ChangeSomeSettingController中,如果你从SettingViewController中pushViewController,你应该调用
navigationController?.popViewControllerAnimated(true)
或者如果你想返回到 SettingViewController
//back to root view controller from navigation
navigationController?.popToRootViewControllerAnimated(true)
// you should call to tabbar view controller
UITabbarViewController *tabbarVC = (UITabbarViewController *)[UIApplication sharedApplication] delegate].window.rootViewController;
[tabBarController setSelectedIndex:1]; // 1 is index of SettingViewController
这是我的示例,对于您的问题,您可以修改以适应您的要求。希望对你有所帮助。
首先,presentViewController:animated:completion:
将模态呈现 SettingsViewController
。你需要的是一个 UINavigationController 流程。
1) 添加创建 UITabBarController
2) Select 将具有 UINavigationControler
流的项目 (UIViewController)。
3) 删除它
4) 添加UITableViewController
5) 添加新的 UITableViewController
到 UITabBarController
6) Select UITableViewController
并嵌入(编辑器 > 嵌入 > 导航控制器)到导航控制器。
7) 添加一个UIViewController
并在UITableViewController
和UIViewController
8) 结果最终结果应该是这样的: