2015-09-26 40 views
1

我有一個應用安裝程序,使其具有帶有「設置按鈕」的導航欄的主根視圖控制器。當用戶點擊設置按鈕時,它會彈出一個不是動態的「settingsTableViewController」,而是靜態的,所以我可以使用style等設置來格式化tableviews。將Pop-over ViewController UITextfield中的數據傳遞迴Master ViewController

在這個設置視圖中,我有一個UITextField需要一個人的名字。

當用戶在導航欄中單擊「完成」時,我想將該名稱傳回主根視圖控制器,以便我可以在標題中使用它來顯示人名。 (我想通過解僱視圖時通過名稱)

我試圖使用賽格的,但沒有運氣。這是我嘗試過的一點。

SettingsViewController(流行的在MasterVC)

class SettingsTableViewController: UITableViewController { 

@IBOutlet weak var nameTextfield: UITextField! 

@IBAction func done(sender: AnyObject) { 



    self.dismissViewControllerAnimated(true, completion: nil) 

} 
    override viewDidLoad(){ 
    self.title = "Settings" 
} 

// MARK: - Navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    // Trying to pass what was typed in the textfield to the Root ViewController and store this name in a variable of type String called 'name' 

    if segue.identifier == "masterView"{ 

     let masterViewController = segue.destinationViewController as! MasterTableViewController 
     masterViewController.name = nameTextField.text 


     print("Segue was used") 
    } 

} 

} 

MasterTableViewController.swift

class MasterTableViewController: UITableViewController { 

    var name: String! 

    // I am trying to then display the name entered in the pop-over view in this root view controller's title 

    override viewDidLoad(){ 
    self.title = name! 
    } 
} 

我的問題是,我做了什麼錯?我試圖使用委託,但我得到零,數據似乎並沒有通過任何方式,所以任何線索將大大幫助。謝謝

回答

1

有一種叫做Unwind Segue的不同類型的segue來做到這一點。它不會創建一個新的mvc,並且它會將數據傳回給提供當前數據的vc。這裏是怎麼做 首先,進入你的故事板,並控制從settingVc拖到它頂部的退出按鈕(自己)。它會給你'Selection Segue'並選擇IBAction goBack。這意味着任何呈現當前版本的vc都會在實現此方法時做好準備。換句話說,你正在推出一個協議,主持人vc將通過執行goBack IBAction來保持一致。這裏是如何實現這一點。在你的母校VC

//You must have this function before you do the segue in storyboard 
@IBAction func goBack(segue: UIStoryboardSegue){ 
    /* this is optional 
    if let stv = segue.sourceViewController as? SettingsTableViewController{ 
     self.name = stv.nameTextfield?.text 
    } 
    */ 
} 

在您的設置VC(當前VC)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    //make sure you set the id of your segue to "Your Go back Unwind segue". ofc u can name it whatever 
    if segue.identifier == "Your Go back Unwind segue"{ 
     if let mtvc = segue.destinationViewController as? MasterTableViewController{ 
      mtvc.name = nameTextField.text 
      print("Segue was used") 
     } 
    } 
} 

,做的方法應該是這樣的

@IBAction func doneEditing(sender: UIButton) { 
    presentingViewController?.dismissViewControllerAnimated(true, completion: nil) 
} 
+0

一個問題:我走進我的故事板,被點擊在SettingsVC tableview上,按照你所說的(在視圖中的任何位置)拖動到它自身頂部的Exit圖標(如你所說)並且什麼也沒有發生,我從Master ViewController中取消了這個設置視圖的鏈接,並且從現在開始 在其自己的。 (MasterVC有一個名爲「設置」的左上角按鈕,調用了這個設置VC – Amit

+0

對不起,我忘了說你需要將IBAction goBack放入你的主人,然後才能繼續退出故事板中的按鈕 – Lukas

+0

謝謝,當我按'設置'按鈕來調出模態視圖來將數據放入文本框中時,當我點擊完成時,什麼也沒有發生。 – Amit

相關問題