传递popViewController之前没有segue和storyboard的数据
我有两个视图控制器。主要和临时之一。第二个在不同的屏幕上执行一个操作(由pushViewController
调用),然后我弹出(popViewController
),并希望呈现返回值为String。传递popViewController之前没有segue和storyboard的数据
我试过使用协议,但它是零。
这里是我的代码:
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
}
}
使用这些链接来了解究竟是如何在迅速使用协议:
您必须执行以下代码行中第一个视图控制器: -
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showSecondViewController" {
let secondViewController = segue.destination as! SecondViewController
secondViewController.delegate = self
}
}
呃......我知道但没有注意到我已经已经获得了我的SecondVC()的一个实例。谢谢! – codddeer123
欢迎@ codddeer123 – Amit
我使用协议尝试,但它是零。
因为你从来没有将它设置为任何东西。这是您的工作,当您推送SecondViewController时,将valueDelegate
设置为MainViewController。但你没有。
你没有做的是设置什么的valueDelegate
另一 SecondViewController到MainViewController:
var secondVC = SecondViewController()
self.secondVC.delegate = self
那是愚蠢的,因为是SecondViewController的什么都没有做不同的,新做的情况下你的真实界面。特别是,它不是被推送的SecondViewController实例。但是,这是您需要设置委托的实例。
你从第二个回到主要的权利? –
你可以在这里查看示例:https://stackoverflow.com/questions/45534199/calling-delegate-function-from-appdelegate-not-working –