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, как представлять вас в классе. Я еще не нашел лучшего решения.