【问题标题】:replace current view with any existing new view用任何现有的新视图替换当前视图
【发布时间】:2011-04-18 21:33:01
【问题描述】:

简而言之,我想从 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 错误。我在将视图作为参数发送时遇到问题,在获取当前视图并将其替换为新视图时遇到问题等等。我曾考虑过拥有一个导航控制器,但看起来这似乎是一种令人生畏的体验,我真的不想深入到不同的层次。 只是一个简单的一对一的视图系统会很棒。哈哈

谁能帮帮我,因为这占用了很多时间!因为这个问题占用了我大部分时间,我什至不得不重新购买许可证以争取更多时间,这很有趣。

任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 大声笑,哦,我已经走了多远......

标签: iphone objective-c uiview views replace


【解决方案1】:

听起来viewSwitchManager 应该源自UIViewController,我将在下面的示例代码中将其称为SwitchViewController。这有一个平淡无奇的UIView 作为它的view 作为背景,它将始终被一个按钮填充的视图所覆盖。

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

@implementation SwitchViewController
-(void) replaceView:(UIView*)oldSubView withView:(UIView*)newSubView {
    [[self view] addSubview:newSubView];
    [oldView removeFromSuperview];
}
@end

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

您可以做两件事来确保您的代码更加可靠。一,使用分析器(Cmd-Shift-a)构建并清理它发现的任何问题。

二,启用僵尸。 NSZombieEnabled 导致所有已解除分配的对象保留在内存中,但标记为“已解除分配”。如果曾经使用过释放的“僵尸”对象,则会引发异常。之后,需要确定为什么您的对象没有被适当地保留。以下是设置NSZombieEnabled的方法:

  • 项目 -> 编辑活动可执行文件
  • 选择“参数”标签
  • 添加到“要在环境中设置的变量”
    • 名称:NSZombieEnabled
    • 值:是

【讨论】:

  • 事情是...如果我在 view1 中按下按钮 3,我将在 view1Controller 中,所以我调用 replaceView 方法但我该如何调用它我必须实例化一个 switchViewManager 类,看起来像我在浪费代码,因为我必须在每个视图中实例化它。然后我不能像那样添加子视图,因为我必须传入一个参数。现在该参数可以是其他 9 个视图中的任何一个。这意味着我还必须在当前显示的视图中实例化 9 个其他视图,以便用户可以在它们之间切换。看起来代码太多了。一定有更简单的方法
  • 我非常感谢您花时间和精力发布您的答案,但如果您能帮助我实现我想要实现的目标,我将不胜感激。提前致谢
  • SwitchViewController 应该在所有其他视图控制器的外部,而不是它们的一部分。 10 个 ViewController 的数组应该归 SwitchViewController 所有,就像 UITableViewController 归 UINavigationController 所有一样。
  • 啊,我明白了.... 这很有意义。这样我就不必继续在各个视图本身中实例化视图。否则我会用 10x10 大声笑来实例化它。所以基本上,如果我在 view1 中,我会做类似 SwitchViewController *switcher = new blah blah 之类的事情。 [切换器替换视图:self.view view4];看,但这看起来不对。抱歉,如果这看起来很明显,那只是我用这个拉头发了一段时间。
猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2012-06-20
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多