问题描述
这是另一个"我很困惑的问题".所以我正在努力将自定义视图引入视图控制器.我将概述错误的确切步骤.
- 创建单视图应用程序项目
- 通过文件 -> 新建 -> 用户界面 -> 视图创建一个 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];
这行得通.
现在我要做的是将此笔尖与 UICustomView 连接,因此我通过 File -> New -> UIView 创建 ArcView.
'4.在 IB 中,我需要将 NIB 连接到 ArcView,因此我在占位符中突出显示文件的所有者并在自定义类中选择 AcrView.
'5.'然后我选择主视图并将其设置为自定义类中的 ArcView.
我不知道下一步是什么,或者是否需要 4 或 5(两者/都不需要)?我是否尝试在 ArcView 中创建插座引用以查看 Interface Builder 中的主视图?我是否应该能够从视图中按住 Alt 键拖动到助手编辑器中的头文件(我目前无法)?
提前谢谢
** 编辑 1 **
这是设置了 arcView 的文件所有者:
未设置 arcView 的视图对象:
推荐答案
设置文件的所有者 == 您的 UIView 子类,以便您可以将插座连接到它.您应该将笔尖绘制的 UIView 的类设置为同一个子类,因为它是该 UIView 子类的一个实例.
换句话说,请按照以下步骤操作:
- 创建一个名为 CustomView 的 UIView 子类
- 创建 UIView xib 新文件 -> 用户界面 -> 视图
- 将文件的所有者更改为 CustomView
- 将视图的类更改为 CustomView
- 如果您愿意,可以添加子视图,将它们作为出口连接到文件所有者 (CustomView)
您的崩溃正在发生,因为您的代码这样说:
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; }
我建立了一个小项目,里面只有这些东西,就像描述的那样.工作正常.让我知道您是否想看它,我会想办法给您发送一个匿名 zip.