IBDesignable UIViewController

Posted

技术标签:

【中文标题】IBDesignable UIViewController【英文标题】: 【发布时间】:2014-11-06 23:06:31 【问题描述】:

我希望能够在代码中布局我的视图控制器,但可以看到界面生成器中显示的布局。

我知道我可以创建一个 UIView 子类,使该 IBDesignable,并将其分配给视图控制器的视图,但这需要我创建此 UIView 子类的所有其他子视图属性,而不是视图控制器的属性。

真正的愿望是能够在代码中布局我的视图控制器,但无需重新构建项目即可快速查看任何更改。如果这可以通过游乐场代替,那么描述如何做到这一点的答案也将不胜感激。

感谢您的任何建议。

【问题讨论】:

【参考方案1】:

我找到了一种使用 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 方法中将数据传递给视图控制器。

【讨论】:

【参考方案2】:

为了在 Xcode 中布局您自己的类,您需要先导入然后在您的 swift 操场中:here 更多信息。

在你这样做之后,就到了“棘手”的部分。为了让你的类在操场上可调试和可见,你的类必须符合协议:CustomPlaygroundQuickLooacable:

这里有一个来自WWDC 的简单示例:

通过实现此协议,您基本上是在告诉 Playground 如何表示您的类。我还没有找到更好的解决方案。

【讨论】:

以上是关于IBDesignable UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

使用 IBDesignable 的水平虚线

IBDesignable UIButton 子类

如何创建 IBDesignable 自定义视图?

将@IBDesignable 用于渐变视图

Swift @IBDesignable/@IBInspectable UIView 样式

快速 IBDesignable 视图未显示在情节提要中