Ios 混淆了对象的自定义类和文件所有者的自定义类之间的区别,以及通过IB执行的步骤

Ios 混淆了对象的自定义类和文件所有者的自定义类之间的区别,以及通过IB执行的步骤,ios,uiview,ios6,Ios,Uiview,Ios6,这是另一个我感到困惑的问题。因此,我正在将自定义视图引入视图控制器。我将仅概述错误的确切步骤 创建单个视图应用程序项目 通过文件->新建->用户界面->查看创建Nib文件;我们把它称为nib.xib。添加一个简单的标签以确保加载。 添加以下代码: UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"theNIB" owner:self options:nil] objectAtIndex:0]; view.frame=CGRectMake(

这是另一个我感到困惑的问题。因此,我正在将自定义视图引入视图控制器。我将仅概述错误的确切步骤

创建单个视图应用程序项目 通过文件->新建->用户界面->查看创建Nib文件;我们把它称为nib.xib。添加一个简单的标签以确保加载。 添加以下代码:

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];
这很有效

现在我要做的是将这个nib连接到UICustomView,这样我就可以通过File->New->UIView创建ArcView

"四,。在IB中,我需要将IB连接到ArcView,以便在占位符中突出显示文件的所有者,并在自定义类中选择AcrView

“5.”然后我选择主视图并在自定义类中将其设置为ArcView

我不知道下一步是什么,也不知道4或5是否都是必需的/两者都不是?我是否尝试在ArcView中为Interface Builder中的主视图创建插座参考?我应该能够在助手编辑器中将视图拖动到当前无法执行的头文件中吗

提前thx

**编辑1**

以下是arcView设置文件的所有者:

未设置arcView的视图对象:


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

@property (weak, nonatomic) IBOutlet ArcView *arcView
然后进入Interface Builder,右键单击文件的所有者。当您在黑色HUD窗口中看到arcView时,将鼠标从该项目拖动到XIB上的视图


现在,您的arcview控件有了一个属性,您可以像使用任何控件(如UIButton、UILabel等)一样使用它。

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

换句话说,请遵循以下步骤:

创建名为CustomView的UIView子类 创建UIView xib新文件->用户界面->视图 将文件的所有者更改为CustomView 将视图的类更改为CustomView 如果希望添加子视图,请将它们作为输出连接到文件所有者自定义视图 发生崩溃是因为代码中说:

UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"theNIB" owner:self options:nil] objectAtIndex:0];
但该所有者:self是运行此代码的视图控制器。您希望视图子类是nib的所有者

要修复此问题,请为UIView子类提供从nib初始化自身的任务,如下所示:

@property (weak, nonatomic) IBOutlet ArcView *arcView
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;
}

我建立了一个小项目,上面只描述了这些东西。很好。让我知道你是否想看它,我会想办法给你发一个匿名的zip。

列表和降价有问题,所以只在它周围添加了一个引号。thx-我更新了,但它在2013-02-28 22:54:24.066 Sam[22922:11303]***由于未捕获的异常“NSUnknownKeyException”终止应用程序,原因:'[setValue:forUndefinedKey:]:该类不符合key arcView的键值编码。请参阅上面的编辑1了解屏幕截图。我认为这是理解设置文件所有者和XIB中的类之间差异的最佳解释。我已经讨论了很多关于这些的问题和答案,但无法清楚地理解差异。但是,这一点非常清楚哦,我。特别是@danh编写的步骤和代码。这个答案值得这么多人投票。非常感谢。在设置所有者之后,将视图的类更改为CustomView有什么意义?@nrudnyk,nib中的视图类确定加载nib时实例化的对象的类。