【发布时间】:2018-12-24 09:10:09
【问题描述】:
有 2 个控制器。 this is how the UI looks this is how I am creating the popup i.e. using segue
主页视图控制器: 有一个标签和一个按钮。点击这个名为 --> 'add action' 的按钮 --> 会打开一个弹出窗口。
弹出视图控制器: 是一个弹出窗口,用户可以在其中输入输入并点击保存。在弹出窗口中,有一个文本字段。用户填写该字段并单击保存。 保存时 --> 为这个 PopupViewController 调用一个 IBAction,它具有解除弹出窗口的解除()函数。 并且关闭函数内的完成块是我试图实例化 HomeViewController 以更新标签的地方。 (注意:PopupViewController 是通过 segue 创建的,通过选择当前上下文)
但是在这样做的同时,我发现 HomeViewController 内的所有 IBOutlets 在尝试从弹出窗口中保存时都为零,因此我无法更新标签。
我尝试过的: 我已经检查了网络上的其他问答并在下面进行了验证: 1. 我检查了标签与故事板的连接。这是正确的。 2. 为了实例化,我使用了 instantiateViewController 语法 HomeViewController 正确。 但问题仍然存在。
HomeViewController
var actionNames = [String]()
var actionDescriptions = [String]()
@IBOutlet weak var firstActionLabel: UILabel!
func updateViewWithNewAction() {
print("updating views started")
if firstActionLabel != nil {
if actionNames.count > 0 {
firstActionLabel.text = actionNames[0]
} else {
print("no actions in the array")
}
} else {
print("firstActionLabel is nil")
}
print("updating views completed")
}
func addActions(actionName: String, actionDescription: String) {
actionNames.append(actionName)
actionDescriptions.append(actionDescription)
print("actions added")
}
PopupViewController
@IBOutlet weak var actionTitle: UITextField!
@IBOutlet weak var actionDescriptionTextView: UITextView!
@IBAction func createAction(_ sender: Any) {
//getting action values from user
actionName = actionTitle.text!
actionDescription = actionDescriptionTextView.text!
dismiss(animated: true, completion: {
print("completion block started ---")
let homeVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
homeVC.addActions(actionName: self.actionName, actionDescription: self.actionDescription)
homeVC.updateViewWithNewAction()
print("completion block ended ---")
})
}
预期结果:在 PopupViewController 的 createAction() 时,HomeViewController 内的标签应该更新为新值。 实际结果:在 homeVC.updateViewWithNewAction() 期间 firstActionLabel 为 nil
【问题讨论】:
-
您确定要在从 PopupViewController 关闭时实例化一个新的 HomeViewController 吗?
-
我愿意改变它。有没有其他方法可以更新 HomeViewController 中的标签?就我而言。
-
你能告诉我们代码,你在哪里显示弹出窗口吗?
-
你必须实现协议委托!!您无法实例化 HomeViewController,因为它已经实例化,并且在解雇您实例化新的 HomeViewController 时,这就是您看不到更新标签的原因。
-
@d4Rk 我添加了图像以显示我显示弹出窗口的位置。这不是通过代码,而是通过 segue。并选择“在当前上下文中”