我有一个特定的情况,但我正在寻找的是一个通用的解决方案。目前我有一个UIImageView,它包含一个图像,一些标签和多个级别的约束。我想一次配置这组控件的属性,并在多个控制器中重用它们。这样,如果我必须更新这个集合,我会在一个地方完成它,并且所有控制器实例都会得到更改(有点像Sketch如何使用符号)。
答案 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初始化您的自定义类。这样做的缺点是你 用代码实例化你的视图并自己将它放在视图层次结构中。您可以在故事板中创建一个容器,您可以在其中添加视图并将其固定到边缘。