Ios 自定义大小的Nib文件控制器和界面生成器

Ios 自定义大小的Nib文件控制器和界面生成器,ios,cocoa-touch,uiviewcontroller,nib,Ios,Cocoa Touch,Uiviewcontroller,Nib,最近,我的一位朋友向我介绍了iOS开发,并开始尝试使用界面生成器和视图控制器。我发现的一件事是,当将nib与视图控制器结合使用时,视图控制器IVAR很快就会被您可能从未实际引用的视图所污染。我想将主nib中的关键组件模块化为几个不同的视图。关于这一点,我有两个问题: 如何为自定义大小的视图(不能填满整个屏幕的视图)创建nib文件 如何将新模块化的类添加到我的主nib中(我将为组件创建的所有类都是视图控制器而不是视图) 假设我将alloc和init视图控制器并以编程方式将它们添加到主视图中,那么既

最近,我的一位朋友向我介绍了iOS开发,并开始尝试使用界面生成器和视图控制器。我发现的一件事是,当将nib与视图控制器结合使用时,视图控制器IVAR很快就会被您可能从未实际引用的视图所污染。我想将主nib中的关键组件模块化为几个不同的视图。关于这一点,我有两个问题:

  • 如何为自定义大小的视图(不能填满整个屏幕的视图)创建nib文件
  • 如何将新模块化的类添加到我的主nib中(我将为组件创建的所有类都是视图控制器而不是视图)
  • 假设我将alloc和init视图控制器并以编程方式将它们添加到主视图中,那么既然我已经调用了
    initWithNibName:bundle:
    ,如何定位自定义大小的视图呢。我不能调用
    initWithFrame:
    对吗
  • 答案将不胜感激
    谢谢,
    PhpMyCoder


    编辑
    我已经找到了第一个问题的答案。在nib文件的属性检查器中,似乎必须禁用状态栏(将其更改为“未指定”),才能在“大小检查器”中编辑高度和宽度参数。但是,我仍然不确定如何将这些自定义nib及其视图控制器添加到另一个nib,而不使用
    initWithFrame:
    addSubview:
    对它们进行编码。在IB中向nib添加视图控制器的视图有什么想法吗


    编辑2
    增加问题3(或2,取决于您的想法)


    编辑3

    我今天似乎很匆忙地问问题。对
    setFrame:
    的简单调用将处理大小和定位问题(您甚至可以将其附加到init函数
    initWithNibName:bundle:frame:
    )。仍然不确定如何将视图(由nib创建)从视图控制器添加到Interface Builder中的另一个nib。如果这是可能的,我很想知道如何做到。

    记住不要混淆ViewController和视图。 它们都在一个层次结构中,每个ViewController都有/控制一个“主”
    视图
    (可能有一束子视图)

    您不需要将视图添加到nib。nib是一种帮助您组装视图的机制。(如果我们深入研究术语,下一个界面生成器文件。)

    这是加载nib的方式:

      [[NSBundle mainBundle] loadNibNamed:@"foo" owner:self options:nil];
    
    通常,您为控制器指定一个nib名称,它会为您执行此操作,但您可以对控制器执行此操作。访问内容有很多复杂而棘手的方法。以下是执行此操作的标准方法

    您传入的所有者必须是在该nib文件中声明为所有者的类型。它应该有一些出口连接到nib文件中的对象。加载nib文件后,它们将“在那里”。如果调用两次,它将覆盖第一个并用第二个替换它们。(大部分无害,绝对无用)


    因此,通常将其连接到
    视图
    。现在您有了一个在内存中浮动的视图,未连接到应用程序的视图层次结构。是时候这么做了必须选择
    视图
    并找出它在预先存在的层次结构中所属的位置,然后调用
    [someOtherView addSubview:self.view]
    否,它就会出现。是的,如果您想明确地放置/调整它的大小,您需要这样做。请注意,
    view.frame
    位于superview的坐标系中。

    记住不要混淆ViewController和视图。 它们都在一个层次结构中,每个ViewController都有/控制一个“主”
    视图
    (可能有一束子视图)

    您不需要将视图添加到nib。nib是一种帮助您组装视图的机制。(如果我们深入研究术语,下一个界面生成器文件。)

    这是加载nib的方式:

      [[NSBundle mainBundle] loadNibNamed:@"foo" owner:self options:nil];
    
    通常,您为控制器指定一个nib名称,它会为您执行此操作,但您可以对控制器执行此操作。访问内容有很多复杂而棘手的方法。以下是执行此操作的标准方法

    您传入的所有者必须是在该nib文件中声明为所有者的类型。它应该有一些出口连接到nib文件中的对象。加载nib文件后,它们将“在那里”。如果调用两次,它将覆盖第一个并用第二个替换它们。(大部分无害,绝对无用)


    因此,通常将其连接到
    视图
    。现在您有了一个在内存中浮动的视图,未连接到应用程序的视图层次结构。是时候这么做了必须选择
    视图
    并找出它在预先存在的层次结构中所属的位置,然后调用
    [someOtherView addSubview:self.view]
    否,它就会出现。是的,如果您想明确地放置/调整它的大小,您需要这样做。请注意,
    view.frame
    位于superview的坐标系中。

    我明白了。假设我有一个子类
    UIViewController
    。在IB中组织/组装视图时,您只能在inspector的identity选项卡下的class textfield中使用
    UIView
    的子类,对吗?是否有方法组装nib以使其包含此视图控制器视图,或者我只需以编程方式执行此操作?是的,如果在IB中选择视图,则只能选择identity inspector将其更改为UIView的子类。是的,您可以在nibI-see中轻松组装控制器视图。假设我有一个子类
    UIViewController
    。在IB中组织/组装视图时,您只能在inspector的identity选项卡下的class textfield中使用
    UIView
    的子类,对吗?有没有办法组装nib,使其包含此视图