[英]How to initialize UIView subclass that is load from xib? Problems with inheritance
[英]How to initialize a UIView subclass loaded from a xib?
關於如何對UIView進行子類化,有無數的答案,但是似乎沒有一個對我有幫助。
我有一個UIView子類
#import <UIKit/UIKit.h>
@interface DarkSeparatorUIView : UIView
@end
並執行:
#import "DarkSeparatorUIView.h"
@implementation DarkSeparatorUIView
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// Do something
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
// Do something
}
return self;
}
@end
在單獨的xib中,我正在創建UIView並將其類標記為“ DarkSeparatorUIView”。 我希望在視圖加載時會調用initWithCoder,但事實並非如此。 我想念什么嗎?
編輯:我嘗試了awakeFromNib,它也無法正常工作。
Edit2:這適用於新項目,但不適用於我當前的項目。 我不知道有什么不同?
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self = [[[NSBundle mainBundle] loadNibNamed:@"DarkSeparatorUIView" owner:self options:nil] objectAtIndex:0];
}
return self;
}
確保您的xib名為DarkSeparatorUIView.xib
我的問題是,當我創建DarkSeparatorUIView時,並未將其包含在所有構建目標中。 如果在創建文件時未執行此操作,則可以在“項目瀏覽器”中單擊該文件,然后選擇“文件瀏覽器”,然后選擇希望該文件可用於的目標。
Apple已在UINibloading.h中聲明的NSBundle
上創建了一個類別。 它將方法loadNibNamed:owner:options
到NSBundle
,這使得從捆綁中加載筆尖非常容易。
為此,我在UIView
上創建了一個類別。 它定義了一個方法:
+(instancetype)viewFromNib
在自定義UIView
子類的標題中包含此類別,以啟用使用此襯板從筆尖加載它的方法:
MyView *view = [MyView viewFromNib];
我將類別歸為要點 ,但加載筆尖的代碼如下所示:
NSString *className = NSStringFromClass([self class]);
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:className owner:self options:nil];
id view = nil;
for (id object in bundle) {
if ([object isKindOfClass:[self class]]) {
view = object;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.