2017-08-12 30 views
-2

我有两个视图控制器。主要和临时之一。第二个在不同的屏幕上执行一个操作(由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 
    } 
} 
+0

你从第二个回到主要的权利? –

+0

你可以在这里查看示例:https://stackoverflow.com/questions/45534199/calling-delegate-function-from-appdelegate-not-working –

回答

1

使用这些链接来了解究竟是如何在迅速使用协议:

您必须执行以下代码行中第一个视图控制器: -

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "showSecondViewController" { 
     let secondViewController = segue.destination as! SecondViewController 
     secondViewController.delegate = self 
     } 
    } 
+0

呃......我知道但没有注意到我已经已经获得了我的SecondVC()的一个实例。谢谢! – codddeer123

+0

欢迎@ codddeer123 – Amit

1

我使用协议尝试,但它是零。

因为你从来没有将它设置为任何东西。这是您的工作,当您推送SecondViewController时,将valueDelegate设置为MainViewController。但你没有。

你没有做的是设置什么valueDelegate另一 SecondViewController到MainViewController:

var secondVC = SecondViewController() 
self.secondVC.delegate = self 

那是愚蠢的,因为​​是SecondViewController的什么都没有做不同的,新做的情况下你的真实界面。特别是,它不是被推送的SecondViewController实例。但是,这是您需要设置委托的实例。