2016-06-21 24 views
0

我正在嘗試使用委託將字符串值傳遞迴前一個視圖控制器。除了某些原因,我發回的字符串值沒有顯示在我希望的第一個View Controller的UITextField中,一切似乎都正常工作。難以將字符串傳遞迴Swift中的前一個視圖控制器

這裏是我的相關代碼:

視圖控制器「B」(一種傳遞數據回到以前的視圖控制器):

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) 
    } 

這裏是視圖控制器「A」的代碼(一個從視圖控制器「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) 

    } 

在上述我的代碼,所述第二視圖控制器,當用戶選擇文本字段調用。然後用戶被帶到一個UITableView,用戶可以從列表中選擇一個項目。選擇完成後,用戶從導航欄中單擊「完成」按鈕,應該返回到第一個視圖控制器。

理論上,應該發生的事情是用戶從列表中選擇應該出現在第一個視圖控制器的文本框中。不幸的是,當選擇從第一個View Controller中的setField函數輸出到控制檯時,該字符串不會出現在textField中。任何人都可以看到我做錯了什麼嗎?

+0

你的做法是不好的,如果你正在構建我建議使用尤里卡形式:https://github.com/xmartlabs/Eureka –

+1

你能告訴你設置'countryProtocol'視圖控制器B – Paulw11

+1

對你清除viewWillAppear或viewDidAppear中的textfield值?兩個函數都在setField完成後調用。如果我只用您發佈的代碼創建項目,它就可以工作。 –

回答

0

Countryprotocol被聲明爲可選的並且從未實例化,所以setField()永遠不會被調用,因爲countryProtocol爲零。

你應該「填充」那個var,最好的地方是第一個viewcontroller繼續。

+0

setField()確實被調用,因爲字符串的值是通過print語句打印的。 – syedfa

+0

打印項目時調用。isSelected == true,而當countryProtocol不爲零時調用setField – sabi

+0

我從兩個打印語句獲得輸出。由於打印信息不同,我有輸出證明它。 – syedfa

0

我想感謝所有評論或提交解決方案的人。我想出了這個問題,當他說他複製了我的工作並按預期工作時,一個人確實走上了正軌。

我能夠通過刪除我從故事板中創建的textField,添加另一個替代它,然後將它重新連線到適當的插座來解決此問題。之後一切順利。我沒有合理的解釋,爲什麼這個工作,但它都是一樣的。

再次感謝所有試圖爲我找到解決方案的人。

一切順利。

相關問題