我有两个视图控制器。主要和临时的。第二个在不同的屏幕上执行操作(由pushViewController
调用)然后我弹出(popViewController
)并且想要呈现返回的值,即String。
我尝试使用协议,但它没有。
这是我的代码:
SecondVC.swift:
protocol ValueDelegate {
func append(_ text: String)
}
class SecondViewController: UIViewController{
var delegate: ValueDelegate!
...
...
private func function(){
if let delegate = self.delegate{
delegate.append(value.stringValue)
}
navigateBack()
}
private func navigateBack(){
if let navigation = self.navigationController{
navigation.popViewController(aniamted: true)
}
}
MainVC.swift:
class MainViewController: UIViewController, ValueDelegate {
var secondVC = SecondViewController()
...
func append(_ value: String) {
textField.text?.append(barcode)
}
...
override func viewDidLoad(){
super.viewDidLoad()
self.secondVC.delegate = self
}
}
答案 0 :(得分:1)
使用这些链接可以准确了解如何在swift中使用Protocols:
您必须在第一个视图控制器中实现以下代码行: -
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showSecondViewController" {
let secondViewController = segue.destination as! SecondViewController
secondViewController.delegate = self
}
}
答案 1 :(得分:1)
我尝试使用协议,但它没有。
因为你从未将它设置为任何东西。当您按下SecondViewController时,将您的valueDelegate
设置为MainViewController是您的工作。但你没有。
您所做的是将另一个 SecondViewController的valueDelegate
设置为MainViewController:
var secondVC = SecondViewController()
self.secondVC.delegate = self
这很愚蠢,因为secondVC
是一个不同的,新制作的SecondViewController实例,与你的真实界面完全无关。特别是,它不是被推送的SecondViewController实例。但这是您需要设置委托的实例。