UIView 不显示在故事板上

UIView not displaying on storyboard

我创建了一个 UIView(KGCalloutView) 并将其放置在我的 Storyboard(Main.storyboard) 中,方法是拖动一个 View 对象并将 class 设置为 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;
}

我尝试 post 我的 .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];
}

您需要在 ViewController 中加载视图才能看到它。

首先,确保将视图的文件所有者 Class 设置为 ViewController(看起来你已经这样做了)

其次,将视图连接到 ViewController 的 属性(标注)

第三,不在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];
    }
}

将nib加载代码放在initwithcoder下

我无法得到有效的答案,所以我只是在 ViewController 而不是我的自定义视图中加载了笔尖:/