混乱的对象和文件所有者的自定义类之间的区别以及通过IB的步骤[英] confused difference between Custom Class for an Object and for the File's Owner and steps via IB

本文是小编为大家收集整理的关于混乱的对象和文件所有者的自定义类之间的区别以及通过IB的步骤的处理方法,想解了混乱的对象和文件所有者的自定义类之间的区别以及通过IB的步骤的问题怎么解决?混乱的对象和文件所有者的自定义类之间的区别以及通过IB的步骤问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

  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];
    

这行得通.

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

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

在此处输入图片描述

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

在此处输入图片描述

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

提前谢谢

** 编辑 1 **

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

在此处输入图片描述

未设置 arcView 的视图对象:

在此处输入图片描述

推荐答案

设置文件的所有者 == 您的 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 初始化自身,如下所示:

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.

本文地址:https://www.itbaoku.cn/post/924485.html