Когда вы настраиваете пользовательские ячейки внутри файла раскадровки, вам не нужно вызывать register(_:forCellReuseIdentifier:)
, потому что раскадровка должна была сделать это за вас.
Причина, по которой deleteButton
равна нулю, заключается в том, что по- регистрируя класс ячейки, как вы сделали, вы перезаписали то, что раскадровка зарегистрировала для вас.Все ячейки, созданные путем удаления из очереди с этим идентификатором повторного использования, не будут иметь никакого отношения к раскадровке и будут просто пустыми.
При условии, что все @IBOutlet
s и идентификаторы повторного использования и все настроено (что вы сказали, что сделали),затем просто удалите ячейку из очереди с идентификатором повторного использования, установленным в раскадровке.
Пример ячейки удаления:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {
if indexPath.row == 0 {
return super.tableView(tableView, cellForRowAt: indexPath)
} else {
// Registering again is unnecessary, because the storyboard should have already done that.
// tableView.register(SubTextFieldCell.self, forCellReuseIdentifier: "SubTextFieldCell")
let cell = tableView.dequeueReusableCell(withIdentifier: "SubTextFieldCell") as! SubTextFieldCell
cell.deleteButton.isEnabled = true
cell.subTextfield.text = "OK"
return cell
}
} else {
...
}
}
Примечание:
Даже в случаяхгде вам нужно зарегистрировать класс в табличном представлении, вам нужно будет сделать это только один раз.(Например, во время viewDidLoad
)
Даже в те времена вы не должны вызывать его каждый раз, когда вы удаляете ячейку из очереди.Вы просто заставляете свое приложение работать усерднее.
Подключение представлений к ячейкам в раскадровке
Установка подкласса для представления таблицы
Установить подкласс для первой ячейки прототипа
Установить идентификатор повторного использования для ячейки прототипа
Убедитесь, что подпредставление (UIButton
и т. Д.) Связано со свойством с @IBOutlet
(код подкласса показан ниже)
Пример UITableViewController
подкласс:
class MyTableViewController: UITableViewController {
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyFirstCell", for: indexPath) as! MyFirstTableViewCell
// Configure cell if needed
cell.myButton.setTitle("New Button Text", for: .normal)
cell.myButton.tintColor = .green
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "MySecondCell", for: indexPath) as! MySecondTableViewCell
// Configure cell if needed
cell.myTextField.backgroundColor = .red
return cell
}
}
}
Пример UITableViewCell
подкласс:
class MyFirstTableViewCell: UITableViewCell {
@IBOutlet weak var myButton: UIButton!
}
Результат: