只有一个按钮rimB
,在GeneralChooser
控制器中点击它时,我调用ChooserPopupViewController
以模态方式显示,当我点击一行时返回信息,到上一个GeneralChooser
控制器并显示在ViewDidLoad ()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "GeneralChooser") as! GeneralChooser
controller.idSet = idAr[indexPath.row]
controller.nameSet = nameAr[indexPath.row]
dismiss(animated: true)
present(controller, animated: false, completion: nil)
在ViewDidLoad ()
控制器的GeneralChooser
中,我看到了我传递的信息
print("id:", idSet)
print("name:", nameSet)
但是,我不能在我的按钮文字上设置这个字符串!
rimB.setTitle(nameSet, for: .normal)
有什么问题?也许我需要重绘我的控制器?
答案 0 :(得分:0)
您需要使用委托来传回信息。你真正在做的是创建一个全新的GeneralChooser实例,并在那里设置变量。这就是为什么你没有看到原始GeneralChooser上发生的变化。
你应该做的是:
1)创建一个协议作为代理
2)将一个委托方法添加到GeneralChooser需要实现的协议
3)在ChooserPopupViewcontroller中添加一个委托变量,让GeneralChooser在呈现“ChooserPopupViewController”之前将其设置为“self”。
4)让ChooserPopupViewController从委托变量调用协议方法,以便将信息传递给GeneralChooser。然后在分配ChooserPopupViewController之前更新GeneralChooser按钮标题。
希望这有帮助!
答案 1 :(得分:0)
我可以从你的代码中看到的主要问题是,你在GeneralChooser实例1上展示了ChooserPopupViewController。然后在ChooserPopupViewController上选择一个单元时,你正在创建另一个GeneralChooser实例2,并在它被解散时将它呈现在ChooserPopupViewController上。所以我很确定你在解雇ChooserPopupViewController后看到了原始的GeneralChooser实例1,但是你将idSet和nameSet传递给了被解雇的GeneralChooser实例2.这不是你应该如何从一个呈现的视图控制器传回信息。请查看本教程以了解可以执行此操作的不同方法(特别是包含属性,委派或闭包的部分)
https://learnappmaking.com/pass-data-view-controllers-swift-how-to/