在不同导航控制器中的视图之间切换

Posted

技术标签:

【中文标题】在不同导航控制器中的视图之间切换【英文标题】:Switch between views in different navigation controllers 【发布时间】:2014-11-07 17:07:15 【问题描述】:

我有 2 个***视图控制器,每个控制器都有自己的导航控制器。我还有一个 MenuViewController,它在 viewDidLoad 时添加到每个***视图控制器,如下所示:

    var storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    var vc : MenuViewController = storyboard.instantiateViewControllerWithIdentifier("MenuViewController") as MenuViewController
    addChildViewController(vc)
    menuView.addSubview(vc.view)
    vc.didMoveToParentViewController(self)

在 MenuViewController 中,您可以在两个***视图控制器之间切换。我目前正在使用此代码在它们之间切换:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    var storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    if indexPath.row == 0 
        let vc : HomeViewController = storyboard.instantiateViewControllerWithIdentifier("HomeViewController") as HomeViewController
        let navigationController = UINavigationController(rootViewController: vc)
        self.presentViewController(navigationController, animated: true, completion: nil)
     else if indexPath.row == 1 
        let vc : FoodCraftsViewController = storyboard.instantiateViewControllerWithIdentifier("FoodCraftsViewController") as FoodCraftsViewController
        let navigationController = UINavigationController(rootViewController: vc)
        self.presentViewController(navigationController, animated: true, completion: nil)
    

我担心的是,每次我使用菜单在视图之间切换时,它都会分配额外的内存,而不是从内存中删除前一个视图。确保每次使用菜单切换***视图时不会重新创建视图控制器/浪费内存的有效方法是什么?

谢谢!

【问题讨论】:

【参考方案1】:

在您的MenuViewController 中保留对HomeViewControllerFoodCraftsViewController 实例的引用。如果指针未设置,则实例化它,否则使用 presentViewController 调用中的现有值。

【讨论】:

就这么简单吗?我不认为这会起作用,因为每次加载***视图控制器时,它都会创建一个新的 MenuViewController 实例。 您的***视图控制器加载了多少次?也许我误解了你的架构。您是否在每个 HomeViewControllerFoodCraftsViewControllers 中创建了一个 MenuViewController 是的,我在两个***视图控制器中创建了一个 MenuViewController 实例,但是两个视图控制器不会同时加载。我这样做是因为我在这些视图控制器中做的动画,其中状态栏隐藏,同时主视图部分地从屏幕上向下动画,显示下面的 MenuViewController。您的方法仍然可以防止不必要的分配/实例化吗? 只要您也只创建过一次MenuViewController,它仍然可以工作。考虑为“Shared MenuViewController”使用类方法。 太好了,谢谢伊恩!你的意思是让 MenuViewController 成为单例吗?

以上是关于在不同导航控制器中的视图之间切换的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 在 UIPageViewController 中的 3 个不同视图控制器之间导航按钮

在 TabBarController 中的选项卡之间切换/导航

使用分段控制在 ios 中的视图之间切换视图

在 Swift 中单击以编程方式切换到 TableViewCell 上的导航视图

UISegmentedControl 在视图控制器之间切换

如何在我的 Xcode Swift 项目的不同导航堆栈中从一个视图控制器屏幕切换到另一个?