在不同导航控制器中的视图之间切换
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
中保留对HomeViewController
和FoodCraftsViewController
实例的引用。如果指针未设置,则实例化它,否则使用 presentViewController
调用中的现有值。
【讨论】:
就这么简单吗?我不认为这会起作用,因为每次加载***视图控制器时,它都会创建一个新的 MenuViewController 实例。 您的***视图控制器加载了多少次?也许我误解了你的架构。您是否在每个HomeViewController
和 FoodCraftsViewController
s 中创建了一个 MenuViewController
?
是的,我在两个***视图控制器中创建了一个 MenuViewController 实例,但是两个视图控制器不会同时加载。我这样做是因为我在这些视图控制器中做的动画,其中状态栏隐藏,同时主视图部分地从屏幕上向下动画,显示下面的 MenuViewController。您的方法仍然可以防止不必要的分配/实例化吗?
只要您也只创建过一次MenuViewController
,它仍然可以工作。考虑为“Shared MenuViewController
”使用类方法。
太好了,谢谢伊恩!你的意思是让 MenuViewController 成为单例吗?以上是关于在不同导航控制器中的视图之间切换的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 在 UIPageViewController 中的 3 个不同视图控制器之间导航按钮
在 TabBarController 中的选项卡之间切换/导航