首页 > 解决方案 > xib 转换为以编程方式查看

问题描述

我需要使用自定义视图而不是使用 xib 文件创建的视图。

如何转换和使用 nib/xib 文件以编程方式查看?

class CustomCell: UITableViewCell {

    var item: ViewModelItem? {
        didSet {
            titleLabel?.text = item?.title
        }
    }

    override func awakeFromNib() {
        super.awakeFromNib()

        selectionStyle = .none
    }

    @IBOutlet weak var titleLabel: UILabel?

    static var nib:UINib {
        return UINib(nibName: identifier, bundle: nil)
    }

    static var identifier: String {
        return String(describing: self)
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        accessoryType = selected ? .checkmark : .none
    }
}

我添加了它而不是 xib。我应该如何发送这个?

我希望以编程方式添加和控制 xib 文件。我希望以编程方式添加和控制 xib 文件。

class CustomCellView: UIView {

    convenience init(frame: CGRect,checkboxTag:Int?) {
        self.init(frame: frame)
        self.addCustomView(checkboxTag: checkboxTag)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func addCustomView(checkboxTag : Int?) {       
        var checkbox: UIButton = ClickingCheckbox()
        if((checkboxTag) != nil)
        {
            checkbox.tag = checkboxTag!
        }
        self.addSubview(checkbox)
    } 
}
class ClickingCheckbox: UIButton {
    convenience init() {
        self.init(frame:  CGRect(x: 0, y: 0, width: 30, height: 30))
        self.setImage(UIImage(named: "unfilled.png"), for: UIControlState.selected)
        self.setImage(UIImage(named: "filled.png"), for: UIControlState.normal)
        self.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
    }

    @objc private func buttonTapped() {
        self.isSelected = !self.isSelected
    }
}

标签: swiftdynamic

解决方案


当您使用 Nib 中的视图时,它会调用AwakeFromNib()方法,代码中的自定义视图使用 Init() 方法。要将 Xib 转换为编程代码,您需要在Init()方法中设置所有 UI 并将所有 initialConfiguration 方法AwakeFromNib()Init()


推荐阅读