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. Я еще не нашел лучшего решения.