【问题标题】: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)
    }
}

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

谢谢!

【问题讨论】:

    标签: ios swift


    【解决方案1】:

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

    【讨论】:

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