Как создать собственное представление в ячейке пользовательского представления таблицы? - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь создать пользовательский флажок внутри пользовательской ячейки табличного представления.

У меня есть пользовательская ячейка табличного представления:

class CustomTableViewCell: UITableViewCell {
   weak var delegate: CellDelegateT?
   @IBOutlet var customCheckbox: VKCheckbox!
}

Вот код для загрузки моего tableView:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TransactionsTableViewCell
    let customCheckbox = cell.customCheckbox!
    customCheckbox.line = .thin
    customCheckbox.bgColor = UIColor.white
    customCheckbox.color = UIColor.black
    customCheckbox.borderColor = UIColor.black
    customCheckbox.borderWidth = 2
    customCheckbox.cornerRadius = customCheckbox.frame.height / 2
}

Где мне нужно разместить код, который создает флажок?Разве cellForRowAt не в том месте?

Когда я использую код вне ячейки таблицы, он работает нормально.Вот почему я думаю, что помещаю код создания флажка в неправильное место.

Ответы [ 2 ]

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

Вообще говоря, рекомендуется не помещать код, который создает ваш флажок, в cellForRowAt, как прекрасно объяснил @fewlinesofcode.Ниже приведены два других варианта ответа на ваш вопрос, которые я лично рекомендовал бы.Надеюсь, это поможет ...

Вариант 1:

class CustomTableViewCell: UITableViewCell {
    @IBOutlet var customCheckbox: VKCheckbox!

    func checkBoxControl() {
        customCheckbox.line = .thin
        customCheckbox.bgColor = UIColor.white
        customCheckbox.color = UIColor.black
        customCheckbox.borderColor = UIColor.black
        customCheckbox.borderWidth = 2
        customCheckbox.cornerRadius = customCheckbox.frame.height / 2
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? TransactionsTableViewCell else { return UITableViewCell() }
    cell.checkBoxControl()
    return cell
}

Вариант 2:

class CustomTableViewCell: UITableViewCell {
    @IBOutlet var customCheckbox: VKCheckbox!

    override func awakeFromNib() {
        super.awakeFromNib()

        customCheckbox.line = .thin
        customCheckbox.bgColor = UIColor.white
        customCheckbox.color = UIColor.black
        customCheckbox.borderColor = UIColor.black
        customCheckbox.borderWidth = 2
        customCheckbox.cornerRadius = customCheckbox.frame.height / 2
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? TransactionsTableViewCell else { return UITableViewCell() }
    return cell
}
0 голосов
/ 24 октября 2018

Ответ на ваш вопрос: «Да, вы должны поставить настройки флажка в другое место. В частности, я бы посоветовал вам переместить его в CustomTableViewCell класс»

СуществуетМнение, что хороший объектно-ориентированный программный дизайн основан на принципах SOLID .

SOLID является аббревиатурой.И S означает Принцип единой ответственности. .Проще говоря, один класс должен нести ответственность за одну вещь, и эта ответственность должна быть заключена в класс.

В вашем случае ViewController берет на себя ответственность за макетирование и настройку подпредставления Cell s.Который ломает по крайней мере ~ S ~ в SOLID

PS Если честно, я немного боюсь написать этот ответ из-за частых споров о хорошем дизайне программного обеспечения.

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