我已经创建了一个UIView(KGCalloutView)并将其放在我的Storyboard(Main.storyboard)中,方法是拖动一个View对象并将该类设置为KGCalloutView。当我运行项目时,视图永远不会显示在故事板中。
我的第一次解决尝试需要添加以下方法,但是它导致我相信无限循环(可以理解)并最终崩溃。
- (void)awakeFromNib {
if ([[NSBundle mainBundle] loadNibNamed:@"KGCalloutView" owner:self options:nil]) {
[self.view setFrame:[self bounds]];
[self addSubview:self.view];
}
}
接下来我尝试添加下面的init方法,但是没有解决问题:
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
}
return self;
}
我试图发布我的.xib和Main.storyboard的图片,但我想我的声誉还不够高。
这是KGCalloutView.h:
@interface KGCalloutView : UIView <UIPickerViewDataSource, UIPickerViewDelegate>
@property (nonatomic) IBInspectable NSString *title;
@property (strong, nonatomic) IBOutlet KGCalloutView *view;
@property (weak, nonatomic) IBOutlet UITextField *titleField;
@property (weak, nonatomic) IBOutlet UIPickerView *typePickerView;
@end
这是KGCalloutView.m:
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
}
return self;
}
- (void)awakeFromNib {
if ([[NSBundle mainBundle] loadNibNamed:@"KGCalloutView" owner:self options:nil]) {
[self.view setFrame:[self bounds]];
[self addSubview:self.view];
}
}
-(void)layoutSubviews{
self.titleField.text = @"test";
self.typePickerView.dataSource = self;
self.typePickerView.delegate = self;
}
这是我的ViewController.h:
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet KGCalloutView *callout;
@end
这是我的ViewController.m:
- (void)viewDidLoad {
[super viewDidLoad];
}
答案 0 :(得分:1)
您需要在ViewController中加载视图才能看到它。
首先,确保将您的视图的文件所有者类设置为ViewController(看起来您已经这样做了)
其次,将视图连接到ViewController(callout)的属性
第三,不要在KGCalloutView.m中实现,而是在ViewController.m中执行以下代码
- (void)viewDidLoad {
[super viewDidLoad];
if ([[NSBundle mainBundle] loadNibNamed:@"KGCalloutView" owner:self options:nil]) {
//This will load view from storyboard to IBOutlet callout
[self.callout setFrame:[self.view bounds]];
[self.view addSubview:self.callout];
}
}
答案 1 :(得分:1)
将nib加载代码放在initwithcoder
下答案 2 :(得分:1)
我无法得到正确的答案所以我只是在ViewController而不是我的自定义视图中加载了我的nib:/