Пользовательский метод делегата вызывается дважды при попытке изменить метку ячейки табличного представления из отдельного viewcontroller - PullRequest
0 голосов
/ 15 декабря 2018

Я создал пользовательский метод делегата, чтобы изменить текст метки ячейки табличного представления, но кажется, что метод вызывается дважды.После добавления точек останова кажется, что он корректно меняет переменную, которая содержит новый текст метки, но затем он вызывает ее во второй раз, на этот раз переменная равна нулю.Это второй вызов, который изменяет label.text, но его ноль.Вот как это делается:

protocol ChangeInfoViewControllerDelegate {
    func changeInfoValue(vital: String)
}

//this class is where the new text value being created
class ManualVitalsInputViewController: UIViewController {

    let vitalVC = VitalsViewController()
    var delegate: ChangeInfoViewControllerDelegate!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.delegate = vitalVC
    }

    @IBAction func saveButtonTapped(_ sender: Any) {
        delegate.changeVitalValue(vital: "Test") //This gets called twice, 2nd time is nil
        dismiss(animated: true)
    }
}

//this is the controller where the text is being changed
class VitalsViewController: UIViewController {

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

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

        if changedManualVital != nil {
            cell.vitalTitleLabel.text = changedManualVital//where text should change to new text from delegate
        } else {
            cell.vitalTitleLabel.text = vital.title
        }

        return cell
    }
}

//where delegate used
extension VitalsViewController: ChangeInfoViewControllerDelegate {

    func changeVitalValue(vital: String) {
        self.changedManualVital = vital
    }
}

Любая идея о том, почему делегат вызывается дважды и как вызывать только один раз.Или, если у вас есть лучшее предложение изменить метку ячейки табличного представления с другого viewcontroller, я открыт для предложений.

1 Ответ

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

Вам нужно избавиться от

let vitalVC = VitalsViewController()

и

 self.delegate = vitalVC

Тогда, когда вы создадите экземпляр vc

 let vc = self.storyboard............... as! ManualVitalsInputViewController
 vc.delegate = self /// here is the actual link
 // present/push
...