对象的自定义类和文件所有者之间的区别以及IB的步骤

时间:2013-03-01 04:51:30

标签: ios uiview ios6

这是另一个“我很困惑的问题”。所以我正在努力将自定义视图引入视图控制器。我将概述错误的确切步骤。

  1. 创建单一视图应用程序项目
  2. 通过文件创建Nib文件 - >新 - >用户界面 - >视图;称之为NIB.xib。添加一个简单的标签以确保加载。
  3. 添加以下代码:

    UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"theNIB" owner:self options:nil] objectAtIndex:0];
    view.frame=CGRectMake(10.0f,10.0f,100.0f,100.0f);
    view.backgroundColor=[UIColor orangeColor];
    [self.view addSubview:view];
    
  4. 这很有效。

    现在我要做的是将此笔尖与UICustomView连接,以便通过File创建ArcView - >新 - >的UIView。

    “4。在IB中,我需要将NIB连接到ArcView,因此我在占位符中突出显示文件所有者,然后在自定义类中选择AcrView。

    enter image description here

    '5'。然后,我选择主视图并将其设置为自定义类中的ArcView。

    enter image description here

    我对下一步是什么或者是否需要4或5(两者都兼有)感到茫然?我是否尝试在ArcView中创建出口参考以查看Interface Builder中的主视图?我是否可以在助理编辑器中将View从View拖动到头文件中(我目前无法进行)?

    事先提前

    **编辑1 **

    这是使用arcView设置的文件所有者:

    enter image description here

    未设置arcView的查看对象:

    enter image description here

2 个答案:

答案 0 :(得分:1)

在父类的@interface部分中定义一个IBOutlet @property,如下所示:

@property (weak, nonatomic) IBOutlet ArcView *arcView

然后进入Interface Builder,右键单击File的Owner。当您在黑色HUD窗口中看到“arcView”时,将鼠标从该项目拖动到XIB上的视图。

现在你有一个arcview控件的属性,你就可以像使用UIButton,UILabel等任何控件一样使用它。

答案 1 :(得分:1)

设置文件的所有者==您的UIView子类,以便您可以连接出口。你应该将nib绘制的UIView类设置为同一个子类,因为它是该UIView子类的一个实例。

换句话说,请按照以下步骤操作:

  1. 创建一个名为CustomView
  2. 的UIView子类
  3. 创建UIView xib新文件 - >用户界面 - >图
  4. 将文件所有者更改为CustomView
  5. 将视图的类更改为CustomView
  6. 如果您愿意,可以添加子视图,将它们作为出口连接到文件所有者(CustomView)
  7. 您的崩溃正在发生,因为您的代码说明了这一点:

    UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"theNIB" owner:self options:nil] objectAtIndex:0];
    

    但是owner:self是运行此代码的视图控制器。您希望视图子类是nib的所有者。

    要修复,请为您的UIView子类提供从nib初始化自己的工作,如下所示:

    CustomView.h

    @interface CustomView : UIView
    
    - (id)initFromNib;
    
    @end
    

    CustomView.m

    #import "CustomView.h"
    
    @interface CustomView ()
    // connect this in the XIB to file's owner that you've set to this CustomView class
    @property (weak, nonatomic) IBOutlet UILabel *myLabel;
    @end
    
    @implementation CustomView
    
    - (id)initFromNib
    {
        self = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];
    
        if (self) {
            // prove you can set properties on your outlets
            self.myLabel.text = @"this is good";
        }
        return self;
    }
    

    如上所述,我在其中构建了一个小项目。工作良好。 Lemme知道你是否愿意看到它,我会找到一种向你发送匿名邮编的方法。