我正在尝试使用委托将字符串值传递回上一个视图控制器。一切似乎都正常,除了某些原因我发回的字符串值没有显示在我想要的第一个视图控制器的UITextField中。
以下是我的相关代码:
ViewController" B" (将数据传回上一个View Controller的那个):
protocol CountryFieldProtocol {
func setField(countryName: String)
}
class TableViewController: UITableViewController {
var countryProtocol: CountryFieldProtocol?
...
func dismiss() {
for item in countries {
if item.isSelected == true {
print("what is the country selected?" + item.name)
countryProtocol?.setField(item.name)
}
}
self.navigationController?.popViewControllerAnimated(true)
}
以下是ViewController中的代码" A" (从View Controller" B")接收数据的那个:
func setField(countryName: String) {
textField.text = countryName
print("the country selected is:" + textField.text!)
}
@IBAction func textFieldEditing(sender: AnyObject) {
textField.resignFirstResponder()
let tableViewController = self.storyboard?.instantiateViewControllerWithIdentifier("CountryList") as? TableViewController
tableViewController?.countryProtocol = self
self.navigationController?.pushViewController(tableViewController!, animated: true)
}
在上面的代码中,当用户选择textField时,将调用第二个View Controller。然后用户被带到UITableView,用户可以从列表中选择一个项目。选择完成后,用户点击"完成"导航栏中的按钮,应该被带回第一个View Controller。
理论上,应该发生的事情是列表中的用户选择应该出现在第一个View Controller的文本字段中。不幸的是,当选择从第一个View Controller中的setField函数打印到控制台时,该字符串不会出现在textField中。谁能看到我做错了什么?
答案 0 :(得分:0)
Countryprotocol被声明为可选,并且从未实例化,因此从不调用setField(),因为countryProtocol为nil。
你应该"填写"那个var,最好的地方就是第一个viewcontroller segue。
答案 1 :(得分:0)
我要感谢评论或提交解决方案的所有人。我发现了这个问题,当一个人说他复制了我的工作并让它按预期工作时,他实际上是在正确的轨道上。
我能够通过删除我从故事板创建的textField,添加另一个而不是它,然后将其重新连接到相应的插座来解决此问题。之后一切顺利。我没有合理的解释为什么这有效,但它做了同样的事情。
再次感谢所有试图为我找到解决方案的人。
一切顺利。