繁体   English   中英

UIViewController无法卸载

[英]UIViewController Won't Unload

自从我开始学习为iOS编程以来(2012年2月),我一直在研究这个问题。 我在这里阅读了很多帖子,似乎都在问同样的问题,而且我试图将答案实施到我的应用程序中也无济于事。 我确信我缺少一些简单的东西。

我有一个视图切换测试应用程序。 共有三种视图:橙色,蓝色,黄色。 它从带有两个按钮的橙色视图开始-切换到蓝色视图并切换到黄色视图。 当我单击切换到黄色视图时,视图在白色背景下旋转。 黄色视图还具有两个按钮-切换到橙色视图并切换到蓝色视图。 当我单击切换到橙色视图时,视图会向后翻转,但是橙色背景不是白色背景,而是背景。 如何使该橙色视图不存在?

这是我用来进行过渡的代码:

-(IBAction)switchToYellowView:(id)sender {

YellowViewController *myViewController = [[YellowViewController alloc]
                                         initWithNibName:@"YellowViewController"
                                         bundle:nil];

[UIView beginAnimations:@"flipview" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft 
                       forView:self.view cache:YES];

[self.view addSubview:myViewController.view];

[UIView commitAnimations];

}

从我的阅读中,我认为我需要从超级视图中删除橙色视图。 但是当我使用

[OrangeViewController.view removeFromSuperView]

我收到一条错误消息,指出“在对象OrangeViewController上找不到属性视图”。

如果我从黄色视图切换到蓝色视图,则橙色视图仍在背景中。 然后从蓝色切换回橙色,黄色仍在背景中。

我在其他地方读到,我还需要通过添加以下内容来释放这些视图

[myViewController release]

在我提交动画之后。 我认为在使用ARC(我正在使用)时这是不必要的。 当我这样做时,尝试返回到橙色视图会导致Bad Access崩溃。

也许我需要对rootViewController做些事情? 我确实在应用程序委托.m中将OrangeView设置为“窗口”的子视图:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.

// Add the view controller's view to the window and display.
[self.window addSubview:viewController2.view];
[self.window makeKeyAndVisible];

return YES;

}

viewController2是指向OrangeViewController的指针。

由于第一条评论,我开始四处寻找用于切换rootViewController的方法-并发现Ken Anderson的讲义,涉及以编程方式切换rootviewcontroller。 我可以改变黄色,但这不是动画。

接下来的两个评论将我引向其他方向-最好的办法是使用一个容器控制器-像UITabBarController吗? 除了使用我自己的按钮并且从不显示标签栏?

我当然可以提供整个应用程序供您阅读。 先感谢您!

尝试使用:

[self transitionFromViewController:currentViewController toViewController:firstViewNav duration: options: animations:^{
        } completion:^(BOOL finished){

        }];

在switchToYellowView:内部,您将黄色视图添加为当前视图(橙色视图)的子视图。 因此,如果您尝试使用[OrangeViewController.view removeFromSuperView]删除橙色视图(这可能不起作用,因为该视图不是OrangeViewController的公共属性),那么您将要删除具有黄色视图的橙色视图,子视图,可以有效地将其从窗口中删除。 我认为您要在switchToYellowView内部执行的操作是这样的:

[self.view removeFromSuperview]; //remove the orange view
[window addSubview:myViewController.view]; //replace it with the yellow view

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM