UITableViewCell具有通用元素

时间:2016-04-01 16:38:27

标签: ios uitableview

我有一个场景,我需要创建大约10个不同的UITableViewCells原型。所有这些单元格都有一些共同的UI元素(标记为黑色的区域)。并且有一个区域(标记为黄色),这些区域对于所有这些原型都是不同的。

有没有办法可以抽象出所有常见的UI元素,就像在UITableViewCell中为contentView做的那样?

我尝试使用所有这些元素创建一个TableViewCell,并清空UIView以保存自定义项,并计划以编程方式将UIView(在单独的xib中创建)加载到其中。

问题是我无法在不放弃约束的情况下将UIView加载到UITableViewCell中?

如何将带有约束的自定义视图加载到另一个?

或者有没有办法像IB中那样创建自定义UITableViewCell?

1 个答案:

答案 0 :(得分:0)

  1. 创建LoadableFromXibView子类
  2. 创建一个xib文件,将File的所有者设置为您的子类
  3. 拖拽插座并照常设计视图
  4. 在您的单元格中插入一个子视图,该子视图将成为单元格的可重用部分,并将其名称设置为您创建的新LoadableFromXibView子类。
  5. 来源:https://gist.github.com/DenHeadless/c3d682e7f499113109d6

        class LoadableFromXibView: UIView { 
    
        var view = UIView()
    
        override init(frame: CGRect) {
            super.init(frame: frame)
            xibSetup()
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            xibSetup()
        }
    
        func xibSetup() {
            view = loadViewFromXib()
            view.frame = bounds
            view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
            backgroundColor = .clearColor()
            addSubview(view)
        }
    
        private func loadViewFromXib() -> UIView {
            let bundle = NSBundle(forClass: self.dynamicType)
            let nib = UINib(nibName: String(self.dynamicType), bundle: bundle)
            let view = nib.instantiateWithOwner(self, options: nil).first as! UIView
            return view
        }
        }