我正在尝试对 NSOutlineView 进行子类化。这是我的代码:
OutlineViewSublcas.h:
#import <Cocoa/Cocoa.h>
@interface OutlineViewSubclass : NSOutlineView {
}
@end
OutlineViewSubclass.m:
#import "OutlineViewSubclass.h"
@implementation OutlineViewSubclass
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
printf("debug A\n");
return self;
}
- (void)awakeFromNib
{
printf("debug B\n");
}
@end
调试输出为:
debug B
为什么不是(id)initWithFrame:(NSRect)frame
被召唤?
Cocoa 控件实现 NSCoding 协议以从笔尖取消归档。 initWithCoder: 方法不是使用 initWithFrame: 初始化对象,然后设置属性,而是在使用 Interface Builder 配置的序列化属性加载控件时负责设置控件。这与使用 NSCoding 序列化任何对象的方式几乎相同。
如果您将自定义 NSView 子类粘贴在未实现 NSCoding 的笔尖中,情况会有点不同,在这种情况下 initWithFrame: 将被调用。在这两种情况下, awakeFromNib 都会在对象加载后被调用,并且通常是在子类中执行额外初始化的好地方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)