Ячейка TableView, где оформить выделенную ячейку? - PullRequest
0 голосов
/ 26 сентября 2018

Я просматривал этот форум, но не нашел ничего связанного с этим.

Я хотел бы взять под контроль функцию выбора UITableView: стилизовать ячейку при выборе и отмене выбора и оставить ее после того, какповторно используется.


Действие, когда пользовательский щелчок идет с анимацией, объявляется в файле TableViewController, конечно:

func selectWorldMessage(indexPath: IndexPath) {

       ...

            cell.attributedText = worldMessage.message.wholeWorldMessageAttributedString()

            UIView.animate(withDuration: duration, animations: {
                cell.bubbleImageView.tintColor = appColors.worldMessageBubbleSelected
                cell.timeLabel.isHidden = false
                cell.messageLabelBottomConstraint.constant = 14
                cell.messageLabelTopConstraint.constant = 14
                cell.timeLabel.alpha = 1.0

                self.view.layoutIfNeeded()
                self.tableView.beginUpdates()
                self.tableView.endUpdates()
                self.lastContentOffsetY = nil
            }, completion: nil)

       ...

func deselectWorldMessage(indexPath: IndexPath) {

       ...

Но.предположим, что вы прокручиваете вниз и вверх, ячейка используется повторно.Я должен оформить это снова.Где мне это сделать?

A) В функции TableViewController cellForRowAt?

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

....

            // If previously was selected
            if (currentSelectedIndexPath == indexPath) {

                cell.messageLabel.attributedText = worldMessage.message.wholeWorldMessageAttributedString()
                cell.bubbleImageView.tintColor = appColors.worldMessageBubbleSelected
                cell.timeLabel.isHidden = false
                cell.messageLabelBottomConstraint.constant = 14
                cell.messageLabelTopConstraint.constant = 14

            } else {

                cell.messageLabel.attributedText = worldMessage.message.shortenWorldMessageIfNeededAttributedString()
                cell.bubbleImageView.tintColor = appColors.worldMessageBubble
                cell.timeLabel.isHidden = true
                cell.messageLabelBottomConstraint.constant = 10
                cell.messageLabelTopConstraint.constant = 10


            }

B) Или в функции Cell setSelected?

override func setSelected(_ selected: Bool, animated: Bool) {
        if selected == true {
            self.messageLabel.attributedText = worldMessage.message.wholeWorldMessageAttributedString()
            self.bubbleImageView.tintColor = appColors.worldMessageBubbleSelected
            self.timeLabel.isHidden = false
            self.messageLabelBottomConstraint.constant = 14
            self.messageLabelTopConstraint.constant = 14
        } else {
            self.messageLabel.attributedText = worldMessage.message.shortenWorldMessageIfNeededAttributedString()
            self.bubbleImageView.tintColor = appColors.worldMessageBubble
            self.timeLabel.isHidden = true
            self.messageLabelBottomConstraint.constant = 10
            self.messageLabelTopConstraint.constant = 10
        }

    }

Что будет лучше и потреблять меньше энергии?

1 Ответ

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

Код должен находиться внутри файла вашей ячейки, потому что он связан с ячейкой и останется после повторного использования.Ваш контроллер представления должен обрабатывать логику «заполнения» для ваших ячеек, но в этом случае вы хотите изменить стиль интерфейса ячеек.Если вы помещаете код в контроллер представления, при изменении ячейки (добавляя или удаляя метку), вы также должны изменить свой контроллер.Также вам необходимо сохранить выбранный путь индекса для проверки в методе cellForRowAt.

class TableViewCell: UITableViewCell {
    override func setSelected(_ selected: Bool, animated: Bool) {
        if selected {
            self.backgroundColor = .red
        } else {
            self.backgroundColor = .green
        }
    }
}
...