在Xcode故事板中创建可重用的组件

时间:2017-11-10 23:35:16

标签: swift xcode

我有一个特定的情况,但我正在寻找的是一个通用的解决方案。目前我有一个UIImageView,它包含一个图像,一些标签和多个级别的约束。我想一次配置这组控件的属性,并在多个控制器中重用它们。这样,如果我必须更新这个集合,我会在一个地方完成它,并且所有控制器实例都会得到更改(有点像Sketch如何使用符号)。

2 个答案:

答案 0 :(得分:5)

先生,您需要一个自定义视图!

我的典型方法是创建一个xib文件,设计我需要的视图,并创建一个子类UIView的类。

执行此操作时,您可以指定xib文件所有者的类(在界面构建器中),并将视图中的任何@IBOutlet链接到您的自定义类。

对于课程,您需要实施一些方法。以下是自定义视图示例:

class LoadingView: UIView {

@IBOutlet var view: UIView!
@IBOutlet weak var messageLabel: UILabel!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    loadViewFromNib()
    setUpView()
}

override init(frame: CGRect) {
    super.init(frame: frame)
    loadViewFromNib()
    setUpView()
}

func setUpView() {
    self.view.layer.cornerRadius = 10.0
    self.view.layer.masksToBounds = true
}

private func loadViewFromNib() {
    let bundle = Bundle.init(for: self.classForCoder)
    bundle.loadNibNamed("LoadingView", owner: self, options: nil)
    self.view.frame = bounds
    self.addSubview(self.view)
}

}

您需要(双关语)来实现所需的init和重写init方法,而另外两个是(种类)可选的。 loadViewFromNib是一种方便的方法,它实现了从应用程序包中实际加载xib文件的逻辑。

不要忘记将笔尖名称与xib文件名匹配!你以后会感谢我的。 ;)

您可以在故事板中使用此视图并使用约束等,方法是放置常规旧视图并将其类分配给自定义类。

您也可以使用@IBDesignable来实际在界面构建器中查看自定义视图,但它往往会不断重新加载和减慢Xcode,除非您切换到我现在无法记住名称的设置(遗憾!)。

享受!

答案 1 :(得分:0)

你想要的东西不可能完全按照你所描述的方式,但有一种方法可以达到同样的效果。

创建一个console.log($("#dd").hasClass('show')); 的子类,其中包含您想要的所有内容,一旦您这样做,有两个选项。

第一个(也是最好的,imo)选项是在初始化视图时使用代码生成布局。这将允许您将视图添加到其他视图控制器,它将自己初始化。这种方法的缺点是你需要用代码创建约束。

第二个选项是使用您的视图和约束创建一个xib,并从该xib初始化您的自定义类。这样做的缺点是你 用代码实例化你的视图并自己将它放在视图层次结构中。您可以在故事板中创建一个容器,您可以在其中添加视图并将其固定到边缘。