IBDesignable UIViewController
Я хотел бы иметь возможность компоновки моего контроллера представления в коде, но увидеть макет, отображаемый в конструкторе интерфейса.
Я знаю, что могу создать подкласс UIView, сделать IBDesignable и присвоить его представлению контроллера представления, но для этого потребуется, чтобы я делал все другие свойства subviews этого подкласса UIView, а не свойства контроллера вида.
Реальное желание состоит в том, чтобы иметь возможность компоновать мои контроллеры представлений в коде, но быстро видеть любые изменения без перестройки проекта. Если это возможно на игровых площадках вместо этого, также будет оценен ответ, описывающий, как это сделать.
Спасибо за любые предложения.
Ответы
Ответ 1
Я нашел обходное решение для проверки схемы контроллера просмотра с помощью IBDesignable.
1. Запустите свой контроллер представления в коде так же, как обычно.
2.Создайте подкласс IBDesignable UIView и добавьте представление диспетчера представлений в виде подвью.
3.Создайте xib и установите класс его представления в подкласс, который вы создали на шаге 2
Чтобы подробно остановиться на шаге 2, ваш IBDesignable метод initWithFrame: может выглядеть как
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
MyViewController *viewController = [MyViewController alloc] init];
viewController.view.frame = self.bounds;
[self addSubview:viewController.view];
return self;
}
Таким образом, вне этого метода initWithFrame весь ваш код макета может обрабатываться вашим контроллером. Возможно, вы захотите передать данные на свой контроллер представления в свой метод subview prepareForInterfaceBuilder.
Ответ 2
Для того, чтобы раскладывать собственные классы в Xcode, вам нужно сначала импортировать на свою быструю игровую площадку: здесь дополнительную информацию.
После этого вы получите "сложную" часть. Чтобы сделать ваш класс отлаживаемым и видимым на игровой площадке, ваш класс должен соответствовать протоколу: CustomPlaygroundQuickLooacable
:
Ниже приведен краткий пример из WWDC:
![]()
Внедряя этот протокол, вы в основном говорите игровой площадке, как представлять класс hown. Я еще не нашел лучшего решения.