使用XCode 4设计自定义UIView

使用XCode 4设计自定义UIView,xcode,uiview,Xcode,Uiview,以前有人问过这个问题,但我找不到确切的答案 我想设计一个定制的UIView类。我想在XCode 4中的XIB文件中进行布局。理想情况下: 我有文件MyView.h、MyView.m和MyView.xib 代码定义了行为,XIB文件定义了布局 代码可能在XIB文件中有引用布局元素的出口 视图的加载程序可以是不同的对象 我希望能够通过以下方式加载视图: MyView *v = [MyView myView]; 我尝试了很多不同的方法来设置文件的所有者并通过NSBundle加载XIB,但我一直遇

以前有人问过这个问题,但我找不到确切的答案

我想设计一个定制的
UIView
类。我想在XCode 4中的XIB文件中进行布局。理想情况下:

  • 我有文件MyView.h、MyView.m和MyView.xib
  • 代码定义了行为,XIB文件定义了布局
  • 代码可能在XIB文件中有引用布局元素的出口
  • 视图的加载程序可以是不同的对象
我希望能够通过以下方式加载视图:

MyView *v = [MyView myView];
我尝试了很多不同的方法来设置文件的所有者并通过NSBundle加载XIB,但我一直遇到键值编码问题

有人能分享做这件事的基本方法吗


我有一本书。如您所见,它会生成一个键值编码错误

哦,我好像已经弄明白了

关键点如下:

  • XIB文件UIView只需要是通用UIView。无需将其设置为子类
  • 文件的所有者必须是您的子类
  • 出口归文件所有者所有
在自定义UIView中,按如下方式加载NIB:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];
        UIView *v = [[nib instantiateWithOwner:self options:nil] lastObject];            
        v.frame = self.frame;
        [self addSubview:v];
    }
    return self;
}

哦,我好像已经弄明白了

关键点如下:

  • XIB文件UIView只需要是通用UIView。无需将其设置为子类
  • 文件的所有者必须是您的子类
  • 出口归文件所有者所有
在自定义UIView中,按如下方式加载NIB:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];
        UIView *v = [[nib instantiateWithOwner:self options:nil] lastObject];            
        v.frame = self.frame;
        [self addSubview:v];
    }
    return self;
}

你到底是如何实例化它的?在我的“container”类中,我有一个自定义视图的出口作为属性,但是当我尝试执行
self.customView=[[customView alloc]init]时

视图没有出现在屏幕上,尽管我知道它已正确初始化,因为我可以看到我放在自定义视图的initWithFrame:方法中的NSLog()

在我的主视图控制器中,在安装新类之前,视图与我在故事板中定义的视图相同:

但是,在自定义视图的initWithFrame:中,框架是
{{0,0},{0,0}
,视图是

初始化完成后,自定义视图的主视图属性几乎是
(null)
,这让我感到困惑

我肯定我遗漏了一些非常简单的东西。您甚至应该在情节提要的主视图中定义自定义视图吗


谢谢

您具体如何实例化它?在我的“container”类中,我有一个自定义视图的出口作为属性,但是当我尝试执行
self.customView=[[customView alloc]init]时

视图没有出现在屏幕上,尽管我知道它已正确初始化,因为我可以看到我放在自定义视图的initWithFrame:方法中的NSLog()

在我的主视图控制器中,在安装新类之前,视图与我在故事板中定义的视图相同:

但是,在自定义视图的initWithFrame:中,框架是
{{0,0},{0,0}
,视图是

初始化完成后,自定义视图的主视图属性几乎是
(null)
,这让我感到困惑

我肯定我遗漏了一些非常简单的东西。您甚至应该在情节提要的主视图中定义自定义视图吗

谢谢