Как добавить различные аксессуары (или подпредставления) для каждой ячейки в Swift? - PullRequest
0 голосов
/ 13 сентября 2018

Я сделал 4 идентичных ячейки с подпредставлениями, используя подкласс UITableViewCell 'FruitTableViewCell'.

FruitTableViewCell.swift

class FruitTableViewCell: UITableViewCell, UITextFieldDelegate {
    var fruitsTextField = UITextField()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.contentView.addSubview(fruitsTextField)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        fruitsTextField.frame = CGRect(x: 100, y: 7.5, width: 50, height: 30)
        fruitsTextField.backgroundColor = UIColor.darkGray
        fruitsTextField.delegate = self

    }
}

TableViewController.swift

class TableViewController: UITableViewController, UITextFieldDelegate {
    let fruitsComponents: [String] = ["Apple", "Banana", "Grape", "Pear"]
    let cellReuseidentifier = "cell"

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.register(FruitTableViewCell.self, forCellReuseIdentifier: cellReuseidentifier)

    }

    override func numberOfSections(in tableView: UITableView) -> Int {
    sections

    return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return fruitsComponents.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseidentifier, for: indexPath) as! FruitTableViewCell
        cell.textLabel?.text = fruitsComponents[indexPath.row]
        return cell

    }
}

Itработает хорошо.

Но на самом деле я хочу добавить разные аксессуары (или подпредставления) для каждой ячейки.Строка 0 для UITextField, Строка 1 для UILabel, Строка 2 для Stepper, Строка 3 для UILabel, ... и т. Д.

Поэтому я создал другой подкласс класса UITableViewCell 'AnotherFruitTableViewCell' для использования.

И я попытался с помощью оператора «if».

исправил TableViewController.swift

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row == 0 {

        let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseidentifier, for: indexPath) as! FruitTableViewCell
        cell.textLabel?.text = fruitsComponents[indexPath.row]
        return cell
    } else {
        let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseidentifier, for: indexPath) as! AnotherFruitTableViewCell
        cell.textLabel?.text = fruitsComponents[indexPath.row]
        return cell
    }

Но всплыло сообщение «Не удалось привести значение типа».Думаю, из-за этого кода.

override func viewDidLoad() {

    super.viewDidLoad()

    tableView.register(FruitTableViewCell.self, forCellReuseIdentifier: cellReuseidentifier)

}

И, в сущности, я думаю, что утверждение «если» не является хорошим способом добавления различных аксессуаров для каждой ячейки.

Как добавить различные аксессуары (или подпредставления) для каждой ячейки?

1 Ответ

0 голосов
/ 13 сентября 2018

Вы зарегистрировали FruitTableViewCell, но не зарегистрировались AnotherFruitTableViewCell

...