Поскольку ячейки используются повторно и вполне могут быть созданы с помощью dequeueReusableCell(reuseIdentifier:indexPath:)
, вы часто ничего не делаете в методах init
.
В вашем случае я бы предложил вам создать функцию, которая настраивает вашу ячейку на основе свойства textFieldStyle
(удаляя любую предыдущую конфигурацию, например, при необходимости ограничения; это может означать, что вам нужно сохранить ссылку на эти ограничения) в свойствах).
Вы можете вызвать эту функцию в двух местах:
- В
awakeFromNib
, если вы используете раскадровку) или init(style:reuseIdentifier:) if you aren't, to configure the cell according to the default value of
textFieldStyle`
- В
didSet
наблюдателе от самого textFieldStyle
.
, например
open class LabelTextfieldTableViewCell: UITableViewCell
{
public var label = UILabel()
public var textField = UITextField()
public var textFieldStyle = eTextfieldStyle.Integer {
didSet {
self.configureCell()
}
}
override public init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)
{
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.configureCell()
}
override func awakeFromNib() {
super.awakeFromNib()
self.configureCell()
}
private func configureCell() {
switch textFieldStyle {
case .Integer:
textField.contentVerticalAlignment = .center
textField.textAlignment = .right
textField.keyboardType = .numberPad
// snip
if (textFieldStyle == .MediumText)
{
contentView.addConstraints(NSLayoutConstraint
.constraints(withVisualFormat:
"H:|-[label]-[textField(==label)]-|",
options: [], metrics: nil, views: viewsDict))
}
else
{
contentView.addConstraints(NSLayoutConstraint
.constraints(withVisualFormat:
"H:|-[label]-[textField(100)]-|",
options: [], metrics: nil, views: viewsDict))
}
В вашем cellForRow(at:)
вы просто удалили бы многократно используемую ячейку и установили ее тип:
cell.textFieldStyle = .MediumText
Альтернативный подход - просто создать три разных подкласса и связать их с разными идентификаторами повторного использования. Затем вы можете настроить ячейку один раз в awakeFromNib
/ init