IBDesignable Для UIViewController
Я хотел бы иметь возможность компоновки моего контроллера вида в коде, но видеть макет, отображаемый в interface builder.
Я знаю, что могу создать подкласс UIView, сделать его IBDesignable и назначить его представлению контроллера вида, но для этого потребуется, чтобы я сделал все другие свойства подкласса UIView вместо свойств контроллера вида.
реальное желание состоит в том, чтобы иметь возможность размещать мои контроллеры просмотра в коде, но быстро видеть любые изменения без перестройки проекта. Если это возможно с игровыми площадками вместо этого, ответ, описывающий, как это сделать, также будет оценен.
Спасибо за любые предложения.
2 ответов
Я нашел обходной путь для тестирования макета контроллера вида с помощью IBDesignable.
1.Раскройте контроллер вида в коде так же, как вы обычно делаете
2.Создайте подкласс IBDesignable UIView и добавьте представление контроллера вида в качестве подвида.
3.Создайте xib и установите класс его представления в подкласс, созданный на Шаге 2
чтобы уточнить на Шаге 2, ваш метод IBDesignable initWithFrame: может выглядеть как
{
self = [super initWithFrame:frame];
MyViewController *viewController = [MyViewController alloc] init];
viewController.view.frame = self.bounds;
[self addSubview:viewController.view];
return self;
}
Так помимо этого метода initWithFrame, весь код макета может обрабатываться контроллером представления. Возможно, вы захотите передать данные контроллеру представления в методе prepareForInterfaceBuilder вашего подвида.
для того, чтобы макет у вас есть классы в Xcode вам нужно сначала импортировать то в swift playground:здесь более подробную информацию.
после того, как вы это сделаете, наступила "сложная" часть. Чтобы сделать ваш класс how debuggable и visibile в playground, ваш класс должен соответствовать протоколу:CustomPlaygroundQuickLooacable
:
здесь есть быстрый пример WWDC:
реализуя этот протокол, вы в основном рассказывая playground, как представлять вас в классе. Я еще не нашел лучшего решения.