Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在UIView的子类中重写initWithFrame:和initWithCoder:?_Ios_Objective C_Uiview - Fatal编程技术网

Ios 如何在UIView的子类中重写initWithFrame:和initWithCoder:?

Ios 如何在UIView的子类中重写initWithFrame:和initWithCoder:?,ios,objective-c,uiview,Ios,Objective C,Uiview,我正在尝试将UIView子类化。我已经有了一些指定的初始值设定项,我希望能够从代码或Nib文件中初始化自定义视图。所以,苹果告诉我们使用指定的初始值设定项,但他们自己没有这样做-initWithCoder:不调用initWithFrame:。在这两种情况下,我应该怎么做才能调用我指定的初始值设定项?没有办法吗?正如你所说: initWithFrame:-建议您实现此方法。你 除此之外,还可以实现自定义初始化方法,或 而不是使用这种方法 initWithCoder:-如果从 Interface B

我正在尝试将UIView子类化。我已经有了一些指定的初始值设定项,我希望能够从代码或Nib文件中初始化自定义视图。所以,苹果告诉我们使用指定的初始值设定项,但他们自己没有这样做-
initWithCoder:
不调用
initWithFrame:
。在这两种情况下,我应该怎么做才能调用我指定的初始值设定项?没有办法吗?

正如你所说:

initWithFrame:-建议您实现此方法。你 除此之外,还可以实现自定义初始化方法,或 而不是使用这种方法

initWithCoder:-如果从 Interface Builder nib文件和视图需要自定义 初始化


我要做的只是一个方法,这两个方法都将调用,这将具有您想要在
UIView

中实现的常见行为,将您的特殊初始化打包到一个方法中。它可以是私有的(以.m声明)。 然后重写这两个初始值设定项并从它们内部调用init方法

- (void)myInitialization
{
    //do your stuff
}

-  (id)initWithFrame:(CGRect)aRect
{
    self = [super initWithFrame:aRect];

    if (self)
    {
        [self myInitialization];
    }

    return self;
}

- (id)initWithCoder:(NSCoder*)aDecoder 
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
        [self myInitialization];
    }

    return self;
}

请看这里的代码示例,我们是否不需要包含
-(instancetype)init
初始值设定项。。?以防万一。我不熟悉objective C。这不是必需的,
UIView
的子类很少由simple
init
初始化。在同样的情况下,也应该包括
init
,即:如果某种类型的视图通常是用固定帧或类似的东西初始化的。