用任何现有的新视图替换当前视图

时间:2010-09-29 15:31:21

标签: iphone objective-c uiview views replace

简而言之,我想从viewSwitchManager类调用一个方法,该类包含一个方法,可以将显示的当前视图切换到不同的视图。

-(void)replaceView:(UIView*)oldSubView withView:(UIView*)newSubView;

我正在尝试实施以下内容:

在我的项目中,我有10个视图,他们都有自己的.m和.h文件。让我们用1到10来表示每个视图。

每个视图只包含9个按钮,允许用户单击按钮,然后应用程序会根据点击的按钮将用户带到指定的视图。

示例:

因此,假设显示的当前视图是:view1。 在view1上,显示了9个按钮,每个按钮对应于应用程序中的不同视图。

[2] [3] [4] [5] [6] [7] [8] [9] [10]

注意:button1缺失,因为它响应view1,这是当前视图,因此此视图不需要button1。

操作:用户点击按钮6。 一个方法将从一个名为viewSwitchManager的单独类调用,将view1替换为当前视图,view6为新视图。

然后将再次显示view6的新视图,对应于应用程序中不同视图的按钮,如下所示:

[1] [2] [3] [4] [5] [7] [8] [9] [10]

注意:button6缺失,因为它响应view6,这是当前视图,因此此视图不需要button6。

这就是我想要实现的目标。我尝试了不同的东西,但我一直在收到错误。有一点甚至是SIGBART错误。我发送视图作为参数,获取当前视图的问题以及用新视图替换它等等都有问题。我已经考虑过拥有一个导航控制器,但看过这看起来像是一个令人生畏的经历,我真的不想深入到不同的层。 只需一个简单的一体化视图系统就可以了。洛尔

有人可以帮助我,因为这花费了很多时间!因为这个问题占用了我大部分时间,所以我甚至不得不重新购买许可证只是为了购买更多时间,这很有趣。

任何帮助都将受到青睐。提前谢谢。

1 个答案:

答案 0 :(得分:1)

听起来viewSwitchManager应该来自UIViewController,我将在下面的示例代码中将其称为SwitchViewController。这个UIView作为view的平淡@implementation SwitchViewController -(void) replaceView:(UIView*)oldSubView withView:(UIView*)newSubView { [[self view] addSubview:newSubView]; [oldView removeFromSuperview]; } @end 作为背景,将始终由按钮填充的视图覆盖。

在那之后,它应该是一个简单的问题:

[oldView removeFromSuperview]

我怀疑你的问题与管理内存管理视图的关系较少。如果您不将其保留在其他地方,NSZombieEnabled将释放并取消分配旧视图。

您可以采取两项措施来确保您的代码更加可靠。一,使用分析仪(Cmd-Shift-a)构建并清理它找到的任何问题。

二,启用Zombies。 NSZombieEnabled导致所有已解除分配的对象保留在内存中,但标记为“已释放”。如果使用了已释放的“zombie”对象,则会引发异常。在那之后,这是一个确定为什么你的对象没有得到适当保留的问题。以下是设置{{1}}:

的方法
  • 项目 - >编辑Active Executable
  • 选择“参数”标签
  • 添加到“要在环境中设置的变量”
    • 姓名:NSZombieEnabled
    • 价值:是