iphone - 将当前 View 替换为任何现有的新 View

标签 iphone objective-c uiview view replace

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

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

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

在我的项目中,我有 10 个 View ,它们都有自己的 .m 和 .h 文件。让我们用 1 - 10 之间的数字代表每个 View 。

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

示例:

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

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

注意:button1 缺失,因为它响应当前 View view1,因此该 View 上不需要 button1。

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

新 View (view6)将再次显示,按钮对应于应用程序中的不同 View ,如下所示:

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

注意:button6 缺失,因为它响应当前 View view6,因此此 View 上不需要 button6。

这就是我想要实现的目标。我尝试过不同的事情,但我不断收到错误。有时甚至会出现 SIGBART 错误。我在将 View 作为参数发送时遇到问题,在获取当前 View 并将其替换为新 View 时遇到问题等等。我曾考虑过拥有一个导航 Controller ,但看起来这看起来像是一次令人畏惧的体验,我真的不想深入到不同的层。 只要一个简单的一进一出 View 系统就很棒了。哈哈

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

任何帮助将不胜感激。预先感谢您。

最佳答案

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

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

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

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

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

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

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

关于iphone - 将当前 View 替换为任何现有的新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823132/

相关文章:

iphone - 删除 iPad/iPhone 上的 CSS 边距

iphone - 这是UIKit错误吗?

iphone - 如何整合我的 Xcode 项目文件?

ios - 在多个 View 中滑动手指时如何检测特定 UIView 中的触摸

iphone - 在iphone中缩放后保留标签的分辨率

iphone - 从 UIWebview 获取响应

objective-c - Interface Builder 中具有属性的自定义控件

objective-c - 使用未声明的标识符 : Area and Perimeter of a Rectangle

ios - 值转换问题 : Implicit conversion loses integer precision: 'NSInteger' (aka 'long' ) to 'int32_t' (aka 'int' )

ios - swift 8 iOS 数据在动态添加数据时在 ScrollView 中被裁剪