Swift 有没有办法模拟视图?

Swift 有没有办法模拟视图?,swift,uiview,Swift,Uiview,我有一个简单的问题: 有没有办法模拟视图?我在故事板中设计了一个视图。 但现在我想使用许多视图,这些视图与在故事板中设计的视图完全相同。我基本上只想“复制”视图7次。 我试过了 let testarray:[UIView] = [someview, someview, someview] 但是,当然,如果我改变一个视图的值,它会改变所有视图的值,而这不是我不想做的。 我希望你明白我想做什么,因为我的英语技能没有那么出色。是的,使用Xibs是可能的。我个人的做法如下 我创建了一个.xib文件,里

我有一个简单的问题:

有没有办法模拟视图?我在故事板中设计了一个视图。 但现在我想使用许多视图,这些视图与在故事板中设计的视图完全相同。我基本上只想“复制”视图7次。 我试过了

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)
        }
    }