【问题标题】:Can a View Controller manage more than 1 nib based view?视图控制器可以管理超过 1 个基于 nib 的视图吗?
【发布时间】:2011-02-11 07:03:26
【问题描述】:

我有一个 VC 控制具有 2 种模式的内容屏幕;普通模式和编辑模式。

我能否创建一个具有 2 个视图的单个 VC,每个视图都来自不同的 nib?

在 iphone 上的许多情况下,您都有一个控制关联视图的 VC。然后上 按下按钮或其他事件,加载新的 VC,其视图变为顶级视图等。

但在这种情况下,我有 2 种模式我想使用相同的 对于VC来说,因为它们关系密切。所以我想要一个可以换入/换出 2 个视图的 VC。

根据这里: How to load a UIView using a nib file created with Interface Builder

我发现我可以从 nib 加载具有关联视图的 VC,然后再加载 与另一个 nib 不同的视图,并使该新视图成为活动视图。

NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"EditMode" owner:self options:nil];
UIView *theEditView = [nibObjects objectAtIndex:0];
self.editView = theEditView;
[self.view addSubview:theEditView];

辅助笔尖的插座与主笔尖一样连接到 VC。当新笔尖被加载时, 插座都连接良好,一切正常。不幸的是,当这个编辑 然后删除视图,似乎没有任何优雅的方式来连接插座 再次从原始笔尖进入(正常模式)视图。笔尖加载和出口设置似乎 只有一次。

那么,如果你想要一个 VC 换入/换出 2 个视图而不创建新的 VC,有哪些选择?

1) 您可以在代码中完成所有操作,但我想使用 nib,因为它使创建 UI 更简单。

2) 您的 VC 有 1 个 nib,只需使用 UIView 及其子类的 hidden 属性隐藏/显示元素。

3) 如上所述加载新笔尖。这对新笔尖来说很好,但是当你回到原来的笔尖时,你如何对插座进行排序。

4) 放弃并接受 VC 和 nib 之间的 1:1。有一个用于普通模式的 nib,一个用于编辑模式的 nib,每种模式都有一个 VC,该 VC 是一个公共超类的子类。

最后,我选择了 4) 并且它可以工作,但需要相当多的额外工作,因为我有一个模型类,我在正常模式下实例化,然后必须传递到编辑模式 VC,因为这两种模式需要访问模型。我也在使用 NSTimer 并且必须在每种模式下启动和停止计时器。正是因为所有这些共享功能,我首先想要一个带有 2 个 nib 的单个 VC。

【问题讨论】:

    标签: iphone uiviewcontroller nib


    【解决方案1】:

    我只需将 另一个 视图添加到您的原始笔尖,然后将其连接到另一个名为“editView”的 IBOutlet。

    @interface TestViewController : UIViewController {
        IBOutlet UIView *editView;
    }
    @end
    

    然后你可以做一个 [self.view addSubview:theEditView];每当你需要展示它。

    【讨论】:

    • 嗨布拉德,我想这可能是一种可能性,但最好的做法是让每个笔尖尽可能小,而且我有很多出口指向我的主视图或编辑视图中的元素,所以可以这么说,要么我必须有重复的插座,否则我在 [查看 removeFromSuperview] 之后回到插座重新连接问题。现在我会坚持我的子类化方法,但是谢谢这个想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多