我想以编程方式在2个UIViewController类之间切换而不需要任何额外的UI控件,例如向应用程序添加UI的UITabBarController。
我的主要用addSubView加载第一个视图控制器。
vc1 = new viewc1();
window.AddSubview(vc1.View);
window.MakeKeyAndVisible ();
我可以使用PresentModalViewController
从第一个加载我的第二个viewcontroller vc2 = new viewc2();
PresentModalViewController(vc2, true);
但我需要来回切换,并释放旧的viewControllers以节省内存。 做这个的最好方式是什么? 第二个视图控制器中的 DismissModalViewControllerAnimated(false); 不释放内存,我不想要模态“窗口”,因为它看起来不是最佳的。我有一个自定义UI,因此不需要tabbar控制器。
答案 0 :(得分: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();
多数民众赞成...希望这会有所帮助...... 我只是按照你的语法
答案 1 :(得分:0)
您可以使用UINavigationController
,但不需要它提供的额外用户界面。您可以使用Hidden
的。UINavigationBar
属性来隐藏它。要在视图之间切换,您只需使用PushViewController(controller, animated)
即可推送新视图。如果要释放旧控制器,则可以使用以下方式设置UINavigationController
的{{1}}属性:
.ViewControllers
这将删除第一个控制器的引用,并使第二个控制器成为根。 (这也可以反过来!)