将视图控制器更改为选项卡栏控制器

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并在UITableViewControllerUIViewController

之间添加一个segue(Show)

8) 结果最终结果应该是这样的: