init*真的*在位于Interface构建器中的UIView中发生了什么?

Hac*_*Saw 2 iphone cocoa-touch objective-c uikit ios

我有一个名为SlideOut的UIView子类.我想在加载时捕获视图的IB位置,所以我在我的实现中有这个:

- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {
    IBframe.origin.x = frame.origin.x;
  IBframe.origin.y = frame.origin.y;
  IBframe.size.height = frame.size.height;
     IBframe.size.width = frame.size.width;
        // Initialization code.
  NSLog(@"init if self x: %f, y: %f", IBframe.origin.x, IBframe.origin.y);
    }
 NSLog(@"init x: %f, y: %f", IBframe.origin.x, IBframe.origin.y);
    return self;
}
Run Code Online (Sandbox Code Playgroud)

...在.h文件中使用匹配的原型.

启动模拟器后,我得到了所有其他诊断信息,但这些日志消息都没有被调用.那么实例如何实际初始化?或者我错过了什么?位置函数有效,但随后因为我没有捕获事物的实际帧而失败.无论如何,这就是我所知道的,我正确地建立了IB连接.

Ste*_*her 11

看看这里:从UIView类参考中对UIView,"覆盖方法"进行子类化.

特别是:

initWithCoder: - 如果从Interface Builder nib文件加载视图并且视图需要自定义初始化,请实现此方法.


Ree*_*sen 5

从xib加载的对象实际上是未归档的.因此,您应该使用该initWithCoder:方法.或者,你可以改为看一下awakeFromNib.