我试图将我的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)
}
在ShipViewController
解雇didSelectItemAt
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let result = completionHandler?(shipNames[indexPath.item])
self.dismiss(animated: true, completion: nil)
}
在ProfileViewController
中不要分配给viewDidLoad
中的completionHandler
分配给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)
}
}
}
}