从模式呈现的ViewController更改按钮的文本

时间:2018-02-13 15:52:35

标签: ios swift xcode

只有一个按钮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)

有什么问题?也许我需要重绘我的控制器?

2 个答案:

答案 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/