2

我想以编程方式在 2 个 UIViewController 类之间切换,而不需要任何额外的 UI 控件,例如向应用程序添加 UI 的 UITabBarController。

我的 main 使用 addSubView 加载第一个视图控制器。

    vc1 = new viewc1();
    window.AddSubview(vc1.View);
    window.MakeKeyAndVisible ();    

我可以使用 PresentModalViewController 从第一个视图控制器加载我的第二个视图控制器

    vc2 = new viewc2();
    PresentModalViewController(vc2, true);

但我需要来回切换,并释放旧的视图控制器以节省内存。做这个的最好方式是什么? DismissModalViewControllerAnimated(false); 在第二个视图中,控制器没有释放内存,我不想要模态“窗口”,因为它似乎不是最优的。我有一个自定义 UI,所以不需要标签栏控制器。

4

2 回答 2

3

你可以用简单的代码来做到这一点。但是您不能释放视图控制器,因为它需要处理用户交互,例如按钮点击事件等。将视图添加到窗口只会保留视图实例。如果您释放视图控制器实例,您可能会收到错误的访问错误或无法识别的选择器错误。

所以让你的主要代码是

if(vc1==nil)
  vc1 = new viewC1();
window.addSubView(vc1.view);
window.MakeKeyAndVisible ();

你的开关代码将是

if(vc2==nil)
   vc2 = new viewC2();
if(vc1.view.superview!=nil){
   vc1.view.removefromSuperView();
   window.addsubview(vc2.view);
} else {
   vc2.view.removeFromSuperView();
   window.addsubview(vc1.view);
}

现在在 dealloc 方法中添加

vc1.release();
vc2.release();

就是这样......希望这会有所帮助......我只是按照你的语法

于 2011-05-11T11:24:32.937 回答
0

您可以使用UINavigationController静止图像,不需要它提供的额外 UI。您可以使用 . Hidden的属性UINavigationBar来隐藏它。要在视图之间切换,您可以使用PushViewController(controller, animated)推送新视图。如果要释放旧控制器,则可以使用以下方法设置UINavigationController'.ViewControllers属性:

navigationController.ViewControllers = new UIViewController[1]{ vc2 };

这将删除第一个控制器的引用并使第二个控制器成为根。(这也将反过来工作!)

于 2011-05-11T13:42:09.913 回答