2015-06-04 56 views
0

似乎有很多的教程在網上對於這一點,但我不能找到一個傳遞值回從TableView中控制器的第一視圖控制器。選擇的TableView細胞後,將數據傳遞迴以前的視圖控制器在斯威夫特

這裏是我設置了...第一個視圖控制器具有一個文本框,當它在用戶按下,它需要他們的第二TableViewController,在那裏他們可以從列表中選擇一個國家。一旦他們選擇了它,我希望他們按下導航欄上的DONE按鈕,然後我希望它繼續回到第一個ViewController並顯示他們在文本框中選擇的國家(準備好讓他們按下按鈕,然後按應用程序繼續等...)

從我可以工作了,我需要在didSelectRowAtIndexPath方法的方法來做到這一點...?但我也一直在看着放鬆賽段的談話?對不起,我對Swift和iOS代碼很陌生,所以希望能明確回答什麼是最好和最簡單的方法。請在下面看我的代碼,每個控制器:

的ViewController

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet var textField: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 

performSegueWithIdentifier("countryTableView", sender: self) 

return false 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

} 

TableViewController

import UIKit 

class TableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

@IBOutlet var tabeView: UITableView! 

var countryPicker = ["Colombia", "England", "France", "Germany", "Brazil", "Austria", "Spain", "Australia", "USA", "Berlin", "Thailand", "Northern Ireland", "New Zealand", "Hawaii", "Switzerland", "Sweeden", "Finland", "Turkey", "Russia", "Netherlands", "Japan"] 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return countryPicker.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewCell") as! UITableViewCell 

    cell.textLabel!.text = countryPicker[indexPath.row] 

    cell.selectionStyle = UITableViewCellSelectionStyle.Blue 

    return cell 
} 

} 
提前

謝謝!

+0

通常,協議方法將被用於將數據傳遞迴以前的VC。其他的東西可以使用像NSNotification – antonio081014

回答

0

在原來的視圖控制器添加要處理呼叫回IBAction爲。

在在視圖的頂部從細胞到退出圖標IB控制拖動。在發行版中,您將看到一個彈出式菜單,其中包含可用IBAction方法的名稱。選擇你的IBAction方法。

我不記得羯羊,如果你添加寄件人變量的IBAction爲,您可以從中檢索信息。

+0

對不起,我不明白你的意思。你可以將它添加到我的代碼中以顯示你在說什麼嗎?謝謝 – Nick89

0

在您的第二個視圖控制器(您的表格視圖控制器)中添加一個包含您之前的視圖控制器的weak var previousVC: UIViewController。在轉到第二個視圖控制器之前,在您的第一個視圖控制器中添加一個prepareForSegue方法,然後使用let destinationVC = segue.destinationViewController,然後destinationVC.previousVC = self訪問您的第二個視圖控制器。您現在可以訪問先前的控制器,您可以通過向第一個視圖控制器添加屬性來傳遞所需的任何數據。

代碼:

class ViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet var textField: UITextField! 

var myObject: Object? // Some object you will pass 
override func viewDidLoad() { 
    super.viewDidLoad() 

} 

func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 

performSegueWithIdentifier("countryTableView", sender: self) 

return false 

} 
... 

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "countryTableView" { 
     let tableVC = segue.destinationViewController as! TableViewController 
     // Pass the object 
     tableVC.passedObject = myObject 
    } 
} 
} 


class TableViewController.... { 
var passedObject: Object // The object to be passed 
... 
} 
+0

謝謝你的回答,我是新來的代碼,所以發現有點讓人迷惑不解:/你會介意在我的代碼上面顯示我在哪裏寫這些位,所以我可以更好地理解它。我感謝您的幫助! – Nick89

相關問題