使用闭包将变量信息传递给 First VC 时出现问题
Trouble Passing Variable Info to First VC Using Closure
我正在尝试将用户在我的 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)
}
在 didSelectItemAt
中关闭 ShipViewController
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)
}
}
}
}
我正在尝试将用户在我的 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)
}
在 didSelectItemAt
ShipViewController
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)
}
}
}
}