У меня есть настройка представления в Интерфейсном Разработчике, который содержит viewController, который загружает другой файл Nib. Однако по какой-то причине объекты, содержащиеся в загружаемом файле пера, никогда не вызываются awakeFromNib
. Что мне здесь не хватает? Есть ли способ загружать представления из Nib в построителе интерфейса, а также управлять их свойствами и размером в построителе интерфейса?
В общем, каковы лучшие практики для управления несколькими перьями и объединения их в сложные представления?
Окончательное решение:
Я создал такой подкласс NSViewController.
@interface NibLoadingViewController : NSViewController
// The placeholder would be replaced during run-time by the view
@property (weak, nonatomic) IBOutlet NSView *placeholder;
@end
@implementation NibLoadingViewController
@synthesize placeholder = _placeholder;
- (void)awakeFromNib {
if (self.placeholder)
self.view = self.view; // Trigger lazy loading
}
- (void)loadView {
[super loadView];
if (!self.view)
return;
// Replace the placehoder if it exists
if (self.placeholder) {
// Copy over relevant attributes
self.view.frame = self.placeholder.frame;
self.view.autoresizingMask = self.placeholder.autoresizingMask;
self.view.autoresizesSubviews = self.placeholder.autoresizesSubviews;
// Replaces the old view
[self.placeholder.superview replaceSubview:self.placeholder with:self.view];
self.placeholder = nil;
}
self.nextResponder = self.view.nextResponder;
self.view.nextResponder = self;
}
@end
Таким образом, вам просто нужно подключить выход заполнителя в перо, которое содержит контроллер представления, и он автоматически загрузит другие перья для вас, скопирует все атрибуты из заполнителя и заменит его в главном пере.