Использование текстового поля для изменения cell.label.text не сохраняется после изменения второго cell.label.text - PullRequest
0 голосов
/ 15 декабря 2018

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

protocol ChangeVitalsViewControllerDelegate {
    func changeVitalValue(vital: String, indexPath: Int)
}

protocol VitalViewControllerDelegate {
    func selected()
}

class VitalCell: UICollectionViewCell {

    @IBOutlet weak var vitalTitleLabel: UILabel!

    var vitalDelegate: VitalViewControllerDelegate!
    var buttonAction: ((Any) -> Void)?

    @IBAction func infoButtonPressed(_ sender: Any) {
        self.buttonAction?(sender)
        vitalDelegate.selected()
    }
}

class ManualVitalsInputViewController: UIViewController {

    var delegate: ChangeVitalsViewControllerDelegate!
    var currentIndex: Int!

    @IBAction func saveButtonTapped(_ sender: Any) {
        delegate.changeVitalValue(vital: enterInfoTextfield.text!, indexPath: currentIndex)
        dismiss(animated: true)
    }

}

class VitalsViewController: UIViewController{

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let vital = vitals[indexPath.row]
        cell.imageView.image = vital.image

        if indexPath.row == changedVitalIndexPath && changedManualVital != nil {
            cell.vitalTitleLabel.text = changedManualVital
        } else if manuallyChangedVitalsArrayIndexs.contains(indexPath.row){
            cell.vitalTitleLabel.text = changedManualVital//pretty sure this is issue but not sure what else to put here
        } else {
            cell.vitalTitleLabel.text = vital.title
        }

        cell.vitalDelegate = self

        cell.buttonAction = { sender in
            self.currentIndexPath = indexPath.row
            self.manuallyChangedVitalsArrayIndexs.append(self.currentIndexPath!)
        }
    }
}

extension VitalsViewController: VitalViewControllerDelegate {

    func selected() {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "ManualVitalsInputViewController") as! ManualVitalsInputViewController
        vc.delegate = self
        vc.currentIndex = currentIndexPath

        present(vc, animated: false)
    }
}

extension VitalsViewController: ChangeVitalsViewControllerDelegate {

    func changeVitalValue(vital: String, indexPath: Int) {
        self.changedManualVital = vital
        self.changedVitalIndexPath = indexPath

        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "load"), object: nil)// this is used to reload collectionview
    }
}

Любая идея окак сохранить текст метки ячейки, чтобы он не менялся при изменении текста метки другой ячейки?

1 Ответ

0 голосов
/ 15 декабря 2018

Вы пропускаете повторное использование ячеек таблицы, поэтому вам нужно сохранить изменения в модели, а затем перезагрузить таблицу, поэтому delcare

var arr = [String](repeating: "", count: numberOfRows)

Затем используйте ее для редактирования текущего indexPath внутри changeVitalValue

arr[indexPath] = vital

последний назначить его внутри cellForRowAt

cell.vitalTitleLabel.text = arr[indexPath.row] 

, если у вас уже есть другой массив dataSource, подумайте о создании структуры для 1 массива ради

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