Swift 有没有办法模拟视图?
我有一个简单的问题: 有没有办法模拟视图?我在故事板中设计了一个视图。 但现在我想使用许多视图,这些视图与在故事板中设计的视图完全相同。我基本上只想“复制”视图7次。 我试过了Swift 有没有办法模拟视图?,swift,uiview,Swift,Uiview,我有一个简单的问题: 有没有办法模拟视图?我在故事板中设计了一个视图。 但现在我想使用许多视图,这些视图与在故事板中设计的视图完全相同。我基本上只想“复制”视图7次。 我试过了 let testarray:[UIView] = [someview, someview, someview] 但是,当然,如果我改变一个视图的值,它会改变所有视图的值,而这不是我不想做的。 我希望你明白我想做什么,因为我的英语技能没有那么出色。是的,使用Xibs是可能的。我个人的做法如下 我创建了一个.xib文件,里
let testarray:[UIView] = [someview, someview, someview]
但是,当然,如果我改变一个视图的值,它会改变所有视图的值,而这不是我不想做的。
我希望你明白我想做什么,因为我的英语技能没有那么出色。是的,使用Xibs是可能的。我个人的做法如下
.xib
文件,里面有一个视图,比如说MyView.xib
.swift
文件,MyView.swift
。在这里面放上所有的@IBOutlet
和所有东西MyView.xib
内部,添加MyView
作为xib的所有者,并将插座链接到子视图MyView
扩展了可以添加到项目中的以下类CustomXibView
(这是我在项目中使用的类)
MyView()
您可以创建一个xib并通过编程方式创建任意数量的实例,也可以使用collectionview/TableView。我已经尝试使用xib文件来实现这一点。但在我要复制的视图中是一个tableview,我无法将其管理为在xib文件中具有tableview。这是可能的吗?你能展示你想要的结果吗,比如设计。。你的问题不清楚。您可以在xib中创建一个tableview单元格,并且可以在任意多个tableview中使用相同的xib。tableview或CollectionView是为了有效地重复单元格而构建的。这是可能的。在代码库中创建对
ui视图的弱@IBOutlet引用
,并对其执行所需操作。我想“复制”包含表视图的视图。我无法将孔表视图宽度动态原型添加到xib文件中。所以我在普通的界面生成器中尝试了它。但是我可以在xib中有一个tableview吗?起初我也有一个xib,但由于这个问题,我切换到了故事板。是的,你可以有任何类型的视图。唯一的问题是,默认情况下,xib文件将包含一个UIView
。如果希望视图更具体(即UITableView
或UITableViewCell
或任何内容),只需删除视图,然后拖动tableView即可。默认情况下,我共享的代码将使用xib文件中的第一个视图对象。我没有真正理解您的解释。但我想这是因为我的英语不好,编程技巧也不好。我对这个方案的理解是这样的:我在需要编写哪种代码的地方分别理解了吗?以及我如何在xib文件中实现tableview?例如,您是否有一个指向教程的链接,其中解释了这一点。我没有找到任何在xib文件中实现tableview的教程。
@IBDesignable
class CustomXibView: UIView {
@objc internal var defaultXib: String {
return String(describing: type(of: self))
}
override init(frame: CGRect) {
super.init(frame: frame)
loadXib(xib: defaultXib)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
loadXib(xib: defaultXib)
}
private func loadXib(xib: String) {
// Load view
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: xib, bundle: bundle)
let contentView = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
// use bounds not frame or it'll be offset
contentView.frame = bounds
// Make the view stretch with containing view
contentView.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]
// Make sure layout uses superview margins
preservesSuperviewLayoutMargins = true
// Adding custom subview on top of our view
addSubview(contentView)
}
}