在没有UI导航器控件的情况下在uiviewcontrollers之间切换

时间:2011-05-11 11:03:04

标签: uiviewcontroller xamarin.ios switching

我想以编程方式在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控制器。

2 个答案:

答案 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

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