Проблемы с передачей информации о переменной в первый VC с помощью замыкания - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь передать данные, имя которых было выбрано пользователем в моем ShipViewController, моему ProfileViewController.Я попытался использовать замыкания для этого, но название кнопки в ProfileViewController (которое представляет модальный поповер на ShipViewController) не меняется на имя, выбранное пользователем в ShipViewController.

Разве это не должно быть String -> () или способ, которым я создаю экземпляр моего контроллера представления, неверен?

(ShipViewController)

var completionHandler:((String) -> ())?

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "shipCell", for: indexPath) as! ShipViewCell

    if selectedIndex == indexPath.row {
        let result = completionHandler?(shipNames[selectedIndex!])
        self.dismiss(animated: true, completion: nil)
    }
}

(In viewDidLoad of ProfileViewController)
        let vc = storyboard?.instantiateViewController(withIdentifier: "ShipViewController") as! ShipViewController
    vc.completionHandler = { (text) -> ()in
        print(text)
        self.shipButton.setTitle(text, for: .normal)
    }

1 Ответ

1 голос
/ 26 марта 2019

Отклонить ShipViewController в didSelectItemAt

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let result = completionHandler?(shipNames[indexPath.item])
        self.dismiss(animated: true, completion: nil)
}

В ProfileViewController Не присваивать завершению в viewDidLoad

Назначить обработчику завершения в prepare for segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showShip" {
        if let vc = segue.destination as? ShipViewController {
             vc.completionHandler = { (text) -> ()in
                  print(text)
                  self.shipButton.setTitle(text, for: .normal)
             }
        }
    }
}
...