简而言之,我想从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错误。我发送视图作为参数,获取当前视图的问题以及用新视图替换它等等都有问题。我已经考虑过拥有一个导航控制器,但看过这看起来像是一个令人生畏的经历,我真的不想深入到不同的层。 只需一个简单的一体化视图系统就可以了。洛尔
有人可以帮助我,因为这花费了很多时间!因为这个问题占用了我大部分时间,所以我甚至不得不重新购买许可证只是为了购买更多时间,这很有趣。
任何帮助都将受到青睐。提前谢谢。
答案 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}}: