iPhone 切换视图 _KILL !问题

Posted

技术标签:

【中文标题】iPhone 切换视图 _KILL !问题【英文标题】:iPhone Switch views _KILL ! Problem 【发布时间】:2009-10-30 19:17:51 【问题描述】:

我在使用 nib 文件的 2 个视图之间切换视图时遇到问题! 这是我的代码。 我的第一页转到第 2 页!但在第 2 页,我无法返回第一页!我的应用程序出去了..这是我的代码:

从第 1 页到第 2 页:

    #import "HafezViewController.h"
#import "GhazaliateHafez.h"


-(IBAction)gh:(id)sender 
    HafezViewController *ghPage = [[HafezViewController alloc] initWithNibName: @"GhazaliateHafez" bundle:nil];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.3];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
    [self.view addSubview:ghPage.view];
    [UIView commitAnimations];

^^^^^^^^^ 这段代码很好用! 但从第 2 页到后面:

#import "GhazaliateHafez.h"
#import "HafezViewController.h"

@implementation GhazaliateHafez


-(IBAction)ghtoIndex:(id)sender 
    HafezViewController *back1 = [[HafezViewController alloc] initWithNibName:@"index" bundle:nil];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
    [self.view addSubview:back1.view];
    [UIView commitAnimations];


点击后退按钮后,我的应用程序崩溃了... 我的问题是什么? 谢谢

【问题讨论】:

我强烈建议您编辑帖子以修复代码格式。在目前的状态下阅读起来非常困难。 【参考方案1】:

您将 view2 添加到 view1,然后将 view1 添加回 view2。完成 View2 后,只需调用 self.view.removeFromSuperview 即可再次显示视图 1。

实际上,再看一遍,似乎您可能想查看presentModalViewController 以显示视图2。

【讨论】:

所以我必须改变这一行 [self.view addSubview:back1.view];到这个? : [self.view.removeFromSuperview];【参考方案2】:

两个想法可能对你有所帮助:

我想你可能想通过 Instruments 来运行它。你在泄漏内存吗?你每次点击都分配一个视图,然后缓存它……你要释放它们吗?

如果有两个独立存在的视图会更容易吗,例如在一个数组中,然后索引您想要激活的视图并将其包装到上面的动画循环中,同时释放和隐藏另一个视图?不太确定如何让其他视图在命令中消失,因为释放是垃圾控制的......但我知道有办法做到这一点。

And this is from a post from earlier that helped me when I was asking how to remove a subview immediately:


myGroovySubview.hidden = YES; 隐藏视图。您也可以尝试使用 [myGroovySubview removeFromSuperview] 将其从其超级视图中删除;

如果您将其从其父视图中删除,则释放调用应自动将其从内存中删除,因为在该调用之后引用计数应为零。

【讨论】:

to marc :所以我必须更改这一行 [self.view addSubview:back1.view];到这个? : [self.view.removeFromSuperview]; ?? 从视图 1 开始。然后添加子视图 2。当您完成子视图 2 后,将其从超级视图中删除。你留下了子视图 1。在你的代码中,你用 addSubview... 添加视图 2,你用 removeFormSuperview... 删除视图 2... 谢谢...但是你能写出正确的代码吗?我是业余爱好者:(

以上是关于iPhone 切换视图 _KILL !问题的主要内容,如果未能解决你的问题,请参考以下文章

实用程序问题 - iPhone SDK

Iphone 上的多个 OpenGL ES 视图是不是有高效且标准化的代码?

在启用自动布局和大小类的情况下更改视图宽度

在 iPhone 中将视图从纵向切换到横向,就像 iPhone 中的计算器一样

iPhone 5 CSS 媒体查询

在 iphone 上的 3 个视图控制器之间切换