2017-08-12 34 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實例。但是,這是您需要設置委託的實例。