Я хочу визуализировать XIB в раскадровке, используя константу IB_DESIGNABLE в Xcode 9.2 с Objective C для iOS SDK 11.2.
Согласно этой статье от Apple theprepareForInterfaceBuilder
метод вызывается Интерфейсным Разработчиком, чтобы позволить вам делать то, что должно быть сделано только для Интерфейсного Разработчика.
Когда Интерфейсный Разработчик создает экземпляр класса с атрибутом IB_DESIGNABLE, он вызывает этот метод, чтобы позволитьПолученный объект знает, что он был создан во время разработки.Вы можете реализовать этот метод в своих проектируемых классах и использовать его для настройки их внешнего вида во время разработки.
Основываясь на этой статье Я хочу визуализировать XIB в своей раскадровке.Когда я использую элемент UIView
в ViewController и устанавливаю
- сначала пользовательский класс равен
XibView
- , а свойство
nibName
- MainViewController
, имяфайл XIB
Я получаю следующую ошибку времени сборки:
Main.storyboard:
error: IB Designables:
Failed to render and update auto layout status for MainViewController (8zi-kg-fjR):
The agent threw an exception.
Что я делаю неправильно, что я получаю эту ошибку вместо визуализированного XIB в представлении, которое я использую в главном.storyboard?
Это XibView.h
IB_DESIGNABLE
@interface XibView : UIView
@property (nonatomic, strong) IBOutlet UIView* contentView;
@property (nonatomic) IBInspectable NSString* nibName;
@end
Это XibView.m
#import "XibView.h"
@implementation XibView
- (id)initWithCoder:(NSCoder *) coder
{
self = [super initWithCoder: coder];
if (self)
{
[self xibSetup];
}
return self;
}
//---------------------------------------------------------------------
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self xibSetup];
}
return self;
}
//---------------------------------------------------------------------
- (void)prepareForInterfaceBuilder
{
[super prepareForInterfaceBuilder];
[self xibSetup];
}
//---------------------------------------------------------------------
- (void)xibSetup
{
[[NSBundle mainBundle] loadNibNamed:_nibName owner:nil options:nil];
[self addSubview:self.contentView];
self.contentView.frame = self.bounds;
}
@end