Swift 4: не удалось загрузить NIB в комплекте: «NSBundle» для пользовательского UITableViewCell (без IB) - PullRequest
0 голосов
/ 11 мая 2019

Я создал свой собственный UITableViewCell (полностью с помощью кода, без компоновщика интерфейса) и получаю следующее исключение:

[...] NSInternalInconsistencyException ', причина:' Не удалось загрузить NIB в пачка: «NSBundle [...]

Я совершенно уверен, что мне не нужно использовать awakeFromNib () (см. Код), но это единственный способ, с помощью которого я работал, передавая его как «одноразовый»

// this works
func tableView(_ tableView: UITableView,
  cellForRowAt indexPath: IndexPath [...] {
    return myCustomCell() 

// this fails
tableView.register(MyCustomCell.self, forCellReuseIdentifier: "foo")
//throws immediately after this line: "[...] Could not load NIB in bundle"

Моя пользовательская ячейка:

class TextValueTableViewCell: UITableViewCell {
    let textField: UITextField = UITextField(
        frame: CGRect(x: 30, y: 5, width: 350, height: 25)
    )
    let label = UILabel(frame: CGRect(x: 30, y: 5, width: 350, height: 25))


    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.awakeFromNib();
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        self.label.text = "oh"
        self.contentView.addSubview(self.label)
        self.contentView.addSubview(self.textField)
        self.textField.rightAnchor.constraint(equalTo: self.contentView.rightAnchor, constant: -25).isActive = true
        self.textField.translatesAutoresizingMaskIntoConstraints = false;
        self.textField.centerYAnchor.constraint(equalTo: self.contentView.centerYAnchor, constant: 0).isActive = true
        self.textField.widthAnchor.constraint(equalTo: self.label.widthAnchor, constant: 0).isActive = true
        self.textField.textAlignment = .right;
        self.textField.placeholder = "Account Name"
    }



    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
    }

}

Как я уже сказал, я не использовал конструктор интерфейсов (и я не планирую это), поэтому я не уверен, почему он попытается загрузить что-то из пакета. В частности, разве я не должен был бы зарегистрировать его как NIB?

 tableView.register(<#T##nib: UINib?##UINib?#>, forCellReuseIdentifier: <#T##String#>)

1 Ответ

0 голосов
/ 11 мая 2019
class TextValueTableViewCell: UITableViewCell {

    let textField: UITextField = UITextField(
        frame: CGRect(x: 30, y: 5, width: 350, height: 25)
    )

    let label = UILabel(frame: CGRect(x: 30, y: 5, width: 350, height: 25))

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        setupCell()
    }

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setupCell()
    }

    func setupCell() {
        label.text = "oh"
        contentView.addSubview(label)
        contentView.addSubview(textField)
        textField.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -25).isActive = true
        textField.translatesAutoresizingMaskIntoConstraints = false;
        textField.centerYAnchor.constraint(equalTo: contentView.centerYAnchor, constant: 0).isActive = true
        textField.widthAnchor.constraint(equalTo: label.widthAnchor, constant: 0).isActive = true
        textField.textAlignment = .right;
        textField.placeholder = "Account Name"
    }


    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

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