Перемещение текста между ячейками табличного представления - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть таблица с несколькими разделами и разным количеством строк в каждом разделе.

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

Эта же настраиваемая ячейка используется для каждой ячейки в табличном представлении.

Когда я ввожу значение в текстовое поле, оно появляется в некоторых других текстовых полях, а также в других строках. И иногда текст исчезает из текстового поля, в которое я его ввел, и появляется в строке ниже. Это происходит, когда я прокручиваю таблицу вверх и вниз.

Это код, который я использую для cellForRowAt

let cell = tableView.dequeueReusableCell(withIdentifier:   "LabelTextFieldTableViewCell", for: indexPath) as! LabelTextFieldTableViewCell
    for i in approachSection {
        if Int(i.row) == indexPath.row {
            cell.myLabel.text = i.name
            cell.myTextField.placeholder = cell.setPlaceholder(type: i.type!)
            if i.type != CustomFieldType.text.rawValue {
                cell.isInteger = true
            }
        }
    }
return cell

А пользовательская ячейка -

class LabelTextFieldTableViewCell: UITableViewCell, UITextFieldDelegate {

    @IBOutlet weak var myLabel: UILabel!
    @IBOutlet weak var myTextField: UITextField!

    var isInteger: Bool?
    var type: String!

    override func awakeFromNib() {
        super.awakeFromNib()
        myTextField.delegate = self
        myTextField.textAlignment = .right
        myTextField.borderStyle = .none


    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    func setPlaceholder(type: String) -> String {
        switch type {
        case CustomFieldType.count.rawValue:
            return "#"
        case CustomFieldType.time.rawValue:
            return "Time as 1234"
        case CustomFieldType.text.rawValue:
            return "Enter Text"
        default:
            return ""
        }
    }

    func textFieldDidBeginEditing(_ textField: UITextField) {
        textField.textColor = .black
    }

    func textFieldDidEndEditing(_ textField: UITextField) {
        guard textField.text != "" else { return }

        if isInteger != nil {
            guard checkIfIntegers(str: textField.text!) != false else {
                print("Not all Integers")
                textField.textColor = .red
                return
            }
        }
    }

}

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Используйте метод prepareToReuse в подклассе вашей ячейки. Здесь вы должны сбросить все значения по умолчанию и в соответствующем методе cellForRowAtIndexPath установить соответствующие значения для ячейки.

func prepareForReuse()

документация Apple

напишите этот метод в своем LabelTextFieldTableViewCell класс, я надеюсь, это поможет вам счастливого кодирования =)

0 голосов
/ 22 февраля 2020

Пожалуйста, убедитесь, что вы правильно следуете этому алгоритму

  1. Прежде всего, вы решите, сколько разделов вам нужно?
  2. тогда вы решите, сколько строк в разделе вам нужно
  3. , тогда вы будете назначать каждой строке свою модель источника данных из ячейки, для которой вам не нужно использовать для l oop. Index.row сделает эту работу за вас.

Примечание: вы можете использовать операторы switch в этих методах, чтобы решить, сколько строк показать в каком конкретном c разделе.

- tableView:cellForRowAtIndexPath: // required method

– tableView:numberOfRowsInSection: // required method

– numberOfSectionsInTableView:

– sectionIndexTitlesForTableView:

– tableView:sectionForSectionIndexTitle:atIndex:

– tableView:titleForHeaderInSection:

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