XIB конвертировать в программный вид - PullRequest
0 голосов
/ 24 октября 2019

Мне нужно использовать настраиваемые представления вместо представлений, созданных с помощью файла 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
    }
}

1 Ответ

0 голосов
/ 24 октября 2019

Когда вы используете представление из Nib, он вызывает метод AwakeFromNib(), пользовательские представления из кода используют методы Init (). Чтобы преобразовать Xib в программный код, вам нужно настроить весь интерфейс внутри метода Init() и переместить все методы initialConfiguration из AwakeFromNib() в Init()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...