У меня проблема, которая, кажется, не имеет очевидного решения. Я искал вокруг, и я прошел через все распространенные ответы, которые я мог найти.
Мои пользовательские представления xib не отображаются в приложении при запуске. Фон четкий, и у этой xib есть 5 изображений, как вы можете видеть ниже, которые не скрыты.
В классе также есть около 5 делегатов, которые я установил от вызывающей стороны, когда делегаты были инициализированы. Вызывающая сторона initWithDelegates:
является родительским UIViewController, который отображает этот xib.
CustomView.h
@interface CustomView : UIView<SomeProtocol>
// UI Items - THESE AREN'T SHOWING UP
@property (strong, nonatomic) IBOutlet UIImageView *image1;
@property (strong, nonatomic) IBOutlet UIImageView *image2;
@property (strong, nonatomic) IBOutlet UIImageView *image3;
@property (strong, nonatomic) IBOutlet UIImageView *image4;
@property (strong, nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic) IBOutlet UIStackView *centerStackView;
- (id)initWithDelegates:(UIViewController*)delegate1 withDelegate2:(NSObject<Delegate2>*)delegate2 withDelegate3:(NSObject<Delegate3>*)delegate3 withDelegate4:(UIViewController<Delegate4>*)delegate4
withDelegate5:(NSObject<Delegate5>*)delegate5;
@end
CustomView.m
@implementation CustomView
- (void)awakeFromNib {
[super awakeFromNib];
}
- (id)initWithDelegates:(UIViewController*)delegate1 withDelegate2:(NSObject<Delegate2>*)delegate2 withDelegate3:(NSObject<Delegate3>*)delegate3 withDelegate4:(UIViewController<Delegate4>*)delegate4
withDelegate5:(NSObject<Delegate5>*)delegate5
{
NSArray * arr =[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil];
self = [arr firstObject];
self.delegate1 = delegate1;
self.delegate2 = delegate2;
self.delegate3 = delegate3;
self.delegate4 = delegate4;
self.delegate5 = delegate5;
[self setLoopImage];
[self layoutIfNeeded];
return self;
}
@end
Что еще я проверил:
- Я убедился, что файл xib правильно выбран в «Custom Class» в конструкторе интерфейса.
- Я просмотрел код, чтобы убедиться в отсутствии сбоев или явных проблем.
- Кажется, что xib не имеет каких-либо очевидных проблем в построителе интерфейса, например, установлен в HIDDEN.
- 5 IBOutlet ImageViews получают адрес памяти и не равны нулю.
Любая помощь приветствуется!
UPDATE:
Я считаю, что это как-то связано с помещением перьев во вложенный UIView. В построителе интерфейса порядок: UIViewController -> UIView -> nibs
Кажется, не существует метода для регистрации перьев из родительского UIViewController, как в классах, подобных UITableView.
Я также пробовал:
- Установка цвета фона в xib, чтобы убедиться, что он появляется. Это не так. Однако, если я установил красный цвет фона в родительском элементе, где я добавил представление в построителе интерфейса, он станет красным. ( См. Рисунок 1 ), а мой файл xib показан в Рисунок 2
- Переопределите initWithFrame, чтобы убедиться, что он вызывается. Это называется.
- Думая, что представление может быть создано дважды, один с помощью autolayout и один с помощью моего пользовательского метода init, я попытался сделать метод
(id)initWithDelegates
не init или зарегистрировать nib в случае дублирования объекта. Я сделал это, удалив 1) return self
, 2) строки, которые регистрируют перо, и 3) сделать прототип метода возвращаемым недействительным - I.E. (void)initWithDelegates
- Это тоже не сработало.
- Я попробовал эти строки в initWithDelegates:
[self addSubview: self.image1];
[self bringSubviewToFront: self.image1];
[self.menuImage setHidden:image1];
- без удачи.
Рисунок 1: (Фактический результат)
Рисунок 2 (Ожидается .. с красным фоном)