2

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

  1. 创建单视图应用程序项目
  2. 通过 File -> New -> User Interface -> View 创建一个 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];
    

这行得通。

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

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

在此处输入图像描述

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

在此处输入图像描述

我不知道下一步是什么,或者是否需要 4 个或 5 个(两者/都不是)?我是否尝试在 ArcView 中创建插座引用以查看 Interface Builder 中的主视图?我应该能够从视图 Alt 拖动到助手编辑器中的头文件(我目前不能)吗?

提前谢谢

** 编辑 1 **

这是带有 arcView 集的文件所有者:

在此处输入图像描述

未设置 arcView 的视图对象:

在此处输入图像描述

4

2 回答 2

1

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

@property (weak, nonatomic) IBOutlet ArcView *arcView

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

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

于 2013-03-01T06:14:20.970 回答
1

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

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

  1. 创建一个名为 CustomView 的 UIView 子类
  2. 创建一个 UIView xib 新文件 -> 用户界面 -> 视图
  3. 将文件的所有者更改为 CustomView
  4. 将视图的类更改为 CustomView
  5. 如果您愿意,可以添加子视图,将它们作为出口连接到文件所有者(CustomView)

您的崩溃正在发生,因为您的代码是这样说的:

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

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

要解决此问题,请让您的 UIView 子类从 nib 初始化自身,如下所示:

自定义视图.h

@interface CustomView : UIView

- (id)initFromNib;

@end

自定义视图.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。

于 2013-03-01T07:31:02.373 回答